{
    "openapi": "3.0.0",
    "info": {
        "title": "FGCTIC API",
        "description": "API REST FGCTIC: inscrição pública, JWT (tymon/jwt-auth), RBAC (Spatie).\n\n**Autenticação:** `POST /api/auth/login` → enviar `Authorization: Bearer {access_token}` nas rotas privadas.\n\n**Papéis:** `master` (total + permissões), `admin` (operacional), `associado` (portal). Matriz em `GET/PUT /api/settings/permissions` (só Master). Páginas permitidas em `GET /api/me/permissions`.",
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "/",
            "description": "Servidor (ajuste conforme APP_URL)"
        }
    ],
    "paths": {
        "/api/audit-logs": {
            "get": {
                "tags": [
                    "Auditoria"
                ],
                "summary": "Listar logs de auditoria",
                "description": "Registo de alterações críticas: quem fez, quando, o quê e motivo.",
                "operationId": "auditLogsIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "action",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "entity_type",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "data_inicio",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "data_fim",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Sem permissão `view audit logs`"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/auth/login": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Login (JWT)",
                "description": "Autentica com e-mail e senha. Retorna `access_token` para uso no header `Authorization: Bearer ...`.",
                "operationId": "authLogin",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoginRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Token + utilizador, papéis e permissões",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AuthTokenResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Credenciais inválidas",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/register": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Registro de usuário",
                "description": "Cria conta com role padrão `associado`. Retorna JWT com permissões do portal.",
                "operationId": "authRegister",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegisterRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Conta criada + token + utilizador, papéis e permissões",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AuthTokenResponse"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validação (ex.: e-mail já usado)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/logout": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Logout",
                "description": "Invalida o token JWT atual.",
                "operationId": "authLogout",
                "responses": {
                    "200": {
                        "description": "Logout OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/auth/me": {
            "get": {
                "tags": [
                    "Auth"
                ],
                "summary": "Usuário autenticado",
                "description": "Retorna dados do usuário, roles e permissões.",
                "operationId": "authMe",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AuthMeResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Token ausente ou inválido"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/inscricao": {
            "post": {
                "tags": [
                    "Inscrição pública"
                ],
                "summary": "Registrar inscrição",
                "description": "Campos querMonitor, serMonitor, materiasDominio, diasMentoria, materiasPrecisaMonitor, areaExperiencia e tempoExperiencia são opcionais (null). Booleans null tratam como false.",
                "operationId": "inscricaoStore",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InscricaoRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Inscrição criada",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/InscricaoCreated"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validação ou e-mail já cadastrado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Erro interno",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/inscricoes": {
            "get": {
                "tags": [
                    "Admin — Inscrições"
                ],
                "summary": "Listar inscrições (admin)",
                "description": "Paginação Laravel. Requer JWT e permissão Spatie **`view inscricoes`** (ex.: utilizador com role `admin`).",
                "operationId": "inscricoesIndex",
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Itens por página (1–100, padrão 15)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 15,
                            "maximum": 100,
                            "minimum": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/InscricoesPaginated"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão `view inscricoes`"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/vagas/anuncio": {
            "get": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Anúncio de vaga (público)",
                "description": "Retorna o anúncio de vaga ativo ou rascunho para exibição no site.",
                "operationId": "vagasAnuncioShow",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "anuncio": {
                                            "$ref": "#/components/schemas/JobVacancyShare"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Atualizar anúncio de vaga (admin)",
                "operationId": "vagasAnuncioUpdate",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "anuncio"
                                ],
                                "properties": {
                                    "anuncio": {
                                        "$ref": "#/components/schemas/JobVacancyShareInput"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Gravado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "ok": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "anuncio": {
                                            "$ref": "#/components/schemas/JobVacancyShare"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão `manage vagas`"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/vagas": {
            "get": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Listar vagas",
                "description": "Público: apenas vagas ativas. Com JWT e permissão `view vagas`, lista todas (filtros opcionais).",
                "operationId": "vagasIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "ativo",
                        "in": "query",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "anuncio_site",
                        "in": "query",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/JobVacancy"
                                            }
                                        },
                                        "page": {
                                            "type": "integer"
                                        },
                                        "limit": {
                                            "type": "integer"
                                        },
                                        "total": {
                                            "type": "integer"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Criar vaga",
                "operationId": "vagasStore",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobVacancyInput"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Criada",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "vaga": {
                                            "$ref": "#/components/schemas/JobVacancy"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão `manage vagas`"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/vagas/{vaga}": {
            "get": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Detalhe da vaga",
                "description": "Público se a vaga estiver ativa; inativas exigem permissão `view vagas`.",
                "operationId": "vagasShow",
                "parameters": [
                    {
                        "name": "vaga",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "vaga": {
                                            "$ref": "#/components/schemas/JobVacancy"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Não encontrada"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Excluir vaga",
                "operationId": "vagasDestroy",
                "parameters": [
                    {
                        "name": "vaga",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removida",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão `manage vagas`"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Vagas"
                ],
                "summary": "Atualizar vaga",
                "operationId": "vagasPatch",
                "parameters": [
                    {
                        "name": "vaga",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobVacancyInput"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "vaga": {
                                            "$ref": "#/components/schemas/JobVacancy"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão `manage vagas`"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/cep": {
            "get": {
                "tags": [
                    "Utilitários"
                ],
                "summary": "Consultar CEP (ViaCEP)",
                "operationId": "cepLookup",
                "parameters": [
                    {
                        "name": "cep",
                        "in": "query",
                        "description": "8 dígitos",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "01310100"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Endereço ViaCEP"
                    },
                    "404": {
                        "description": "CEP não encontrado",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "CEP inválido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    },
                    "502": {
                        "description": "Falha ao consultar serviço externo"
                    }
                }
            }
        },
        "/api/dashboard/summary": {
            "get": {
                "tags": [
                    "Dashboard"
                ],
                "summary": "Resumo do painel (mentoria, disciplinas, projetos, associados, gráfico mensal, por disciplina, foco por área)",
                "description": "Bloco `mentoria`: totais de sessões, em andamento, concluídas e sem disciplina. Série `mentorias_por_mes`: últimos 12 meses (zeros onde não há dados). Estados úteis: `agendada`, `em_andamento`, `concluida`, `cancelada` (usados em filtros e em `disciplinas_em_foco`).",
                "operationId": "dashboardSummary",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DashboardSummary"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão `view dashboard`"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/me/permissions": {
            "get": {
                "tags": [
                    "Permissões"
                ],
                "summary": "Papéis, permissões e matriz (se admin de settings)",
                "operationId": "mePermissions",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/settings/permissions": {
            "get": {
                "tags": [
                    "Permissões"
                ],
                "summary": "Obter matriz de permissões",
                "operationId": "settingsPermissionsGet",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PermissionsMatrix"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "put": {
                "tags": [
                    "Permissões"
                ],
                "summary": "Guardar matriz de permissões",
                "operationId": "settingsPermissionsPut",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/PermissionsMatrix"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Atualizado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/perfil": {
            "get": {
                "tags": [
                    "Perfil"
                ],
                "summary": "Perfil do utilizador autenticado",
                "operationId": "perfilGet",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Perfil"
                ],
                "summary": "Atualizar perfil",
                "operationId": "perfilPatch",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/perfil/senha": {
            "post": {
                "tags": [
                    "Perfil"
                ],
                "summary": "Alterar senha",
                "operationId": "perfilSenha",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "senhaAtual",
                                    "senhaNova",
                                    "senhaNova_confirmation"
                                ],
                                "properties": {
                                    "senhaAtual": {
                                        "type": "string",
                                        "format": "password"
                                    },
                                    "senhaNova": {
                                        "type": "string",
                                        "format": "password"
                                    },
                                    "senhaNova_confirmation": {
                                        "type": "string",
                                        "format": "password"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Senha alterada",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/users": {
            "get": {
                "tags": [
                    "Utilizadores"
                ],
                "summary": "Listar utilizadores (paginado)",
                "operationId": "usersIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "maximum": 100
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "role",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/users/{user}": {
            "get": {
                "tags": [
                    "Utilizadores"
                ],
                "summary": "Detalhe de utilizador (uuid na rota)",
                "operationId": "usersShow",
                "parameters": [
                    {
                        "name": "user",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Utilizadores"
                ],
                "summary": "Atualizar utilizador (nome, is_active, role)",
                "operationId": "usersPatch",
                "parameters": [
                    {
                        "name": "user",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/associados": {
            "get": {
                "tags": [
                    "Associados"
                ],
                "summary": "Listar associados",
                "operationId": "associadosIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "categoria",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "uf",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Associados"
                ],
                "summary": "Criar associado",
                "operationId": "associadosStore",
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/associados/{associado}": {
            "get": {
                "tags": [
                    "Associados"
                ],
                "summary": "Obter associado",
                "operationId": "associadosShow",
                "parameters": [
                    {
                        "name": "associado",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Associados"
                ],
                "summary": "Eliminar associado",
                "operationId": "associadosDestroy",
                "parameters": [
                    {
                        "name": "associado",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Associados"
                ],
                "summary": "Atualizar associado ou `acao: RENOVAR_ANUIDADE_12M`",
                "operationId": "associadosPatch",
                "parameters": [
                    {
                        "name": "associado",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/projetos": {
            "get": {
                "tags": [
                    "Projetos"
                ],
                "summary": "Listar projetos",
                "operationId": "projetosIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "area",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Projetos"
                ],
                "summary": "Criar projeto",
                "operationId": "projetosStore",
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/projetos/{projeto}": {
            "get": {
                "tags": [
                    "Projetos"
                ],
                "operationId": "projetosShow",
                "parameters": [
                    {
                        "name": "projeto",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Projetos"
                ],
                "operationId": "projetosDestroy",
                "parameters": [
                    {
                        "name": "projeto",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Projetos"
                ],
                "operationId": "projetosPatch",
                "parameters": [
                    {
                        "name": "projeto",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/financeiro/lancamentos": {
            "get": {
                "tags": [
                    "Financeiro"
                ],
                "summary": "Listar lançamentos financeiros",
                "operationId": "financeiroLancamentosIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "tipo",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "categoria",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "competencia_mes",
                        "in": "query",
                        "description": "YYYY-MM",
                        "schema": {
                            "type": "string",
                            "example": "2026-03"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/financeiro/resumo": {
            "get": {
                "tags": [
                    "Financeiro"
                ],
                "summary": "Resumo agregado (totais por status/tipo)",
                "operationId": "financeiroResumo",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/FinanceiroResumo"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/financeiro": {
            "post": {
                "tags": [
                    "Financeiro"
                ],
                "summary": "Criar lançamento",
                "operationId": "financeiroStore",
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/financeiro/{lancamento}": {
            "get": {
                "tags": [
                    "Financeiro"
                ],
                "operationId": "financeiroShow",
                "parameters": [
                    {
                        "name": "lancamento",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Financeiro"
                ],
                "operationId": "financeiroDestroy",
                "parameters": [
                    {
                        "name": "lancamento",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Financeiro"
                ],
                "summary": "Atualizar ou `acao: EFETIVAR`",
                "operationId": "financeiroPatch",
                "parameters": [
                    {
                        "name": "lancamento",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/financeiro/upload-comprovante": {
            "post": {
                "tags": [
                    "Financeiro"
                ],
                "summary": "Upload de ficheiro (multipart)",
                "operationId": "financeiroUploadComprovante",
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "required": [
                                    "file"
                                ],
                                "properties": {
                                    "file": {
                                        "description": "Comprovante",
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "URL do comprovante",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "comprovanteUrl": {
                                            "type": "string",
                                            "format": "uri"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos": {
            "get": {
                "tags": [
                    "Diretoria"
                ],
                "summary": "Listar mandatos",
                "operationId": "diretoriaMandatosIndex",
                "parameters": [
                    {
                        "name": "unidade",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "include",
                        "in": "query",
                        "description": "Ex.: cargos,antecessores",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaMandatosStore",
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos/{mandato}": {
            "get": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaMandatosShow",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "include",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaMandatosDestroy",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaMandatosPatch",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos/{mandato}/cargos": {
            "post": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaCargosStore",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos/{mandato}/cargos/{cargo}": {
            "delete": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaCargosDestroy",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "cargo",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaCargosPatch",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "cargo",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos/{mandato}/antecessores": {
            "post": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaAntecessoresStore",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos/{mandato}/antecessores/{antecessor}": {
            "delete": {
                "tags": [
                    "Diretoria"
                ],
                "operationId": "diretoriaAntecessoresDestroy",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "antecessor",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/mandatos/{mandato}/antecessores/sync": {
            "post": {
                "tags": [
                    "Diretoria"
                ],
                "summary": "Sincronizar antecessores a partir de mandatos anteriores",
                "operationId": "diretoriaAntecessoresSync",
                "parameters": [
                    {
                        "name": "mandato",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/diretoria/upload-avatar": {
            "post": {
                "tags": [
                    "Diretoria"
                ],
                "summary": "Upload de imagem para avatar",
                "operationId": "diretoriaUploadAvatar",
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "required": [
                                    "file"
                                ],
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "URL do avatar",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "avatarUrl": {
                                            "type": "string",
                                            "format": "uri"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentoria/catalogo/disciplinas": {
            "get": {
                "tags": [
                    "Mentoria — catálogo"
                ],
                "operationId": "mentoriaCatalogoDisciplinas",
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentoria/catalogo/mentores": {
            "get": {
                "tags": [
                    "Mentoria — catálogo"
                ],
                "operationId": "mentoriaCatalogoMentores",
                "parameters": [
                    {
                        "name": "disciplinaId",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "disciplina_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentoria/catalogo/slots": {
            "get": {
                "tags": [
                    "Mentoria — catálogo"
                ],
                "operationId": "mentoriaCatalogoSlots",
                "parameters": [
                    {
                        "name": "mentorId",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "mentor_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentoria/catalogo/participantes": {
            "get": {
                "tags": [
                    "Mentoria — catálogo"
                ],
                "summary": "Associados (participantes) paginados",
                "operationId": "mentoriaCatalogoParticipantes",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "mentorId",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentorias": {
            "get": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "summary": "Listar sessões de mentoria (agendamento)",
                "operationId": "mentoriasIndex",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "disciplina_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "mentor_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "aluno_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "data_inicio",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "data_fim",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginationList"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "operationId": "mentoriasStore",
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentorias/{mentoria_sessao}": {
            "get": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "description": "Aceita UUID ou número (`numero`) da sessão.",
                "operationId": "mentoriasShow",
                "parameters": [
                    {
                        "name": "mentoria_sessao",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "operationId": "mentoriasDestroy",
                "parameters": [
                    {
                        "name": "mentoria_sessao",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MessageResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "operationId": "mentoriasPatch",
                "parameters": [
                    {
                        "name": "mentoria_sessao",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Validação",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ValidationError"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentoria": {
            "post": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "description": "Alias de `POST /api/mentorias`.",
                "operationId": "mentoriaSingularStore",
                "responses": {
                    "201": {
                        "description": "Criado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/mentoria/{mentoria_sessao}": {
            "get": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "description": "Alias de `GET /api/mentorias/{mentoria_sessao}`.",
                "operationId": "mentoriaSingularShow",
                "parameters": [
                    {
                        "name": "mentoria_sessao",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "description": "Alias de `DELETE /api/mentorias/{mentoria_sessao}`.",
                "operationId": "mentoriaSingularDestroy",
                "parameters": [
                    {
                        "name": "mentoria_sessao",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "patch": {
                "tags": [
                    "Mentoria — sessões"
                ],
                "description": "Alias de `PATCH /api/mentorias/{mentoria_sessao}`.",
                "operationId": "mentoriaSingularPatch",
                "parameters": [
                    {
                        "name": "mentoria_sessao",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/reports/mentoria-excel": {
            "get": {
                "tags": [
                    "Relatórios"
                ],
                "summary": "Exportar mentorias para Excel",
                "operationId": "reportsMentoriaExcel",
                "parameters": [
                    {
                        "name": "disciplina_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "mentor_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "aluno_id",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "data_inicio",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "data_fim",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "busca",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ficheiro .xlsx",
                        "content": {
                            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {}
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/reports/users-csv": {
            "get": {
                "tags": [
                    "Relatórios"
                ],
                "operationId": "reportsUsersCsv",
                "responses": {
                    "200": {
                        "description": "CSV",
                        "content": {
                            "text/csv": {}
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/reports/users-excel": {
            "get": {
                "tags": [
                    "Relatórios"
                ],
                "operationId": "reportsUsersExcel",
                "responses": {
                    "200": {
                        "description": "Excel",
                        "content": {
                            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {}
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        }
    },
    "components": {
        "schemas": {
            "InscricaoRequest": {
                "required": [
                    "nome",
                    "email",
                    "telefone",
                    "cep",
                    "numero",
                    "formadoFormando",
                    "curso"
                ],
                "properties": {
                    "nome": {
                        "type": "string",
                        "example": "Fulano da Silva"
                    },
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "telefone": {
                        "type": "string",
                        "example": "+55 (11) 99999-9999"
                    },
                    "cep": {
                        "type": "string",
                        "example": "01310-100"
                    },
                    "logradouro": {
                        "type": "string",
                        "nullable": true
                    },
                    "cidade": {
                        "type": "string",
                        "nullable": true
                    },
                    "estado": {
                        "type": "string",
                        "example": "SP",
                        "nullable": true,
                        "maxLength": 2
                    },
                    "numero": {
                        "type": "string",
                        "example": "1000"
                    },
                    "complemento": {
                        "type": "string",
                        "nullable": true
                    },
                    "formadoFormando": {
                        "type": "string",
                        "enum": [
                            "formado",
                            "formando"
                        ]
                    },
                    "curso": {
                        "type": "string",
                        "example": "Ciência da Computação"
                    },
                    "areaExperiencia": {
                        "type": "string",
                        "nullable": true
                    },
                    "tempoExperiencia": {
                        "type": "string",
                        "nullable": true
                    },
                    "querMonitor": {
                        "description": "Voluntário mentor (null = false)",
                        "type": "boolean",
                        "nullable": true
                    },
                    "materiasDominio": {
                        "description": "Opcional; se querMonitor, pode ser null ou []",
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "nullable": true
                    },
                    "diasMentoria": {
                        "description": "Opcional; disponibilidade se precisa de monitor",
                        "type": "array",
                        "items": {
                            "properties": {
                                "dia": {
                                    "type": "string",
                                    "example": "Segunda-feira"
                                },
                                "inicio": {
                                    "type": "string",
                                    "example": "14:00"
                                },
                                "fim": {
                                    "type": "string",
                                    "example": "18:00"
                                }
                            },
                            "type": "object"
                        },
                        "nullable": true
                    },
                    "serMonitor": {
                        "description": "Precisa de monitor (null = false); aceita precisaMonitor",
                        "type": "boolean",
                        "nullable": true
                    },
                    "materiasPrecisaMonitor": {
                        "description": "Opcional",
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "InscricaoCreated": {
                "properties": {
                    "message": {
                        "type": "string",
                        "example": "Inscrição de associado(a) recebida com sucesso."
                    },
                    "id": {
                        "type": "integer",
                        "example": 1
                    }
                },
                "type": "object"
            },
            "ValidationError": {
                "properties": {
                    "message": {
                        "type": "string"
                    },
                    "errors": {
                        "type": "object",
                        "additionalProperties": true
                    }
                },
                "type": "object"
            },
            "LoginRequest": {
                "required": [
                    "email",
                    "password"
                ],
                "properties": {
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "password": {
                        "type": "string",
                        "format": "password"
                    }
                },
                "type": "object"
            },
            "RegisterRequest": {
                "required": [
                    "name",
                    "email",
                    "password",
                    "password_confirmation"
                ],
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "password": {
                        "type": "string",
                        "format": "password"
                    },
                    "password_confirmation": {
                        "type": "string",
                        "format": "password"
                    }
                },
                "type": "object"
            },
            "JwtTokenResponse": {
                "properties": {
                    "access_token": {
                        "type": "string"
                    },
                    "token_type": {
                        "type": "string",
                        "example": "bearer"
                    },
                    "expires_in": {
                        "description": "TTL em segundos",
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "AuthTokenResponse": {
                "description": "Resposta de login/registo: JWT + dados do utilizador, papéis (Spatie) e lista de permissões.",
                "properties": {
                    "access_token": {
                        "type": "string"
                    },
                    "token_type": {
                        "type": "string",
                        "example": "bearer"
                    },
                    "expires_in": {
                        "description": "TTL em segundos",
                        "type": "integer"
                    },
                    "user": {
                        "type": "object"
                    },
                    "roles": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "permissions": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "type": "object"
            },
            "MessageResponse": {
                "properties": {
                    "message": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "AuthMeResponse": {
                "properties": {
                    "user": {
                        "type": "object"
                    },
                    "roles": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "permissions": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "type": "object"
            },
            "MentoriaResource": {
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "inscricao_id": {
                        "type": "integer"
                    },
                    "materias_dominio": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "status": {
                        "type": "string"
                    },
                    "observacao_interna": {
                        "type": "string",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "MonitorResource": {
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "inscricao_id": {
                        "type": "integer"
                    },
                    "materias_precisa": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "dias_mentoria": {
                        "type": "array",
                        "items": {
                            "properties": {
                                "dia": {
                                    "type": "string"
                                },
                                "inicio": {
                                    "type": "string"
                                },
                                "fim": {
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "status": {
                        "type": "string"
                    },
                    "observacao_interna": {
                        "type": "string",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "InscricaoResource": {
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "nome": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "telefone": {
                        "type": "string"
                    },
                    "cep": {
                        "type": "string"
                    },
                    "logradouro": {
                        "type": "string",
                        "nullable": true
                    },
                    "cidade": {
                        "type": "string",
                        "nullable": true
                    },
                    "estado": {
                        "type": "string",
                        "nullable": true
                    },
                    "numero": {
                        "type": "string"
                    },
                    "complemento": {
                        "type": "string",
                        "nullable": true
                    },
                    "formado_formando": {
                        "type": "string"
                    },
                    "curso": {
                        "type": "string"
                    },
                    "area_experiencia": {
                        "type": "string",
                        "nullable": true
                    },
                    "tempo_experiencia": {
                        "type": "string",
                        "nullable": true
                    },
                    "quer_monitor": {
                        "type": "boolean"
                    },
                    "ser_monitor": {
                        "type": "boolean"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "mentoria": {
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/MentoriaResource"
                            }
                        ],
                        "nullable": true
                    },
                    "monitor": {
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/MonitorResource"
                            }
                        ],
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "InscricoesPaginated": {
                "properties": {
                    "current_page": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/InscricaoResource"
                        }
                    },
                    "first_page_url": {
                        "type": "string"
                    },
                    "from": {
                        "type": "integer",
                        "nullable": true
                    },
                    "last_page": {
                        "type": "integer"
                    },
                    "last_page_url": {
                        "type": "string"
                    },
                    "next_page_url": {
                        "type": "string",
                        "nullable": true
                    },
                    "path": {
                        "type": "string"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "prev_page_url": {
                        "type": "string",
                        "nullable": true
                    },
                    "to": {
                        "type": "integer",
                        "nullable": true
                    },
                    "total": {
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "PaginationList": {
                "description": "Listagem custom: data + page + limit + total",
                "properties": {
                    "data": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "page": {
                        "type": "integer",
                        "example": 1
                    },
                    "limit": {
                        "type": "integer",
                        "example": 15
                    },
                    "total": {
                        "type": "integer",
                        "example": 100
                    }
                },
                "type": "object"
            },
            "FinanceiroResumo": {
                "properties": {
                    "total_centavos": {
                        "type": "integer",
                        "example": 150000
                    },
                    "por_status": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "integer"
                        }
                    },
                    "por_tipo": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "integer"
                        }
                    }
                },
                "type": "object"
            },
            "DashboardSummary": {
                "description": "Painel: mentoria (sessões por estado), catálogo de disciplinas, projetos, associados, série mensal para gráfico, totais por disciplina e foco por área.",
                "properties": {
                    "mentoria": {
                        "properties": {
                            "sessoes_total": {
                                "description": "Sessões agendadas (mentoria_sessoes)",
                                "type": "integer"
                            },
                            "em_andamento": {
                                "type": "integer"
                            },
                            "concluidas": {
                                "type": "integer"
                            },
                            "sem_disciplina": {
                                "type": "integer"
                            },
                            "inscricoes_voluntario_mentor": {
                                "description": "Inscrições que querem ser mentor (tabela mentorias)",
                                "type": "integer"
                            },
                            "inscricoes_precisa_monitor": {
                                "description": "Inscrições que precisam de monitor (tabela monitores)",
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    },
                    "disciplinas": {
                        "properties": {
                            "total_catalogo": {
                                "type": "integer"
                            },
                            "ativas": {
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    },
                    "projeto": {
                        "properties": {
                            "total": {
                                "type": "integer"
                            },
                            "em_andamento": {
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    },
                    "associados_total": {
                        "description": "Total de inscrições no site (tabela inscricoes)",
                        "type": "integer"
                    },
                    "associados_cadastro": {
                        "description": "Fichas formais na tabela associados (CRUD admin)",
                        "type": "integer"
                    },
                    "inscricoes_por_mes": {
                        "description": "Inscrições nos últimos 12 meses (created_at)",
                        "type": "array",
                        "items": {
                            "properties": {
                                "mes": {
                                    "type": "string",
                                    "example": "2026-03"
                                },
                                "label": {
                                    "type": "string",
                                    "example": "mar./2026"
                                },
                                "total": {
                                    "type": "integer"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "mentorias_por_mes": {
                        "type": "array",
                        "items": {
                            "properties": {
                                "mes": {
                                    "type": "string",
                                    "example": "2026-03"
                                },
                                "label": {
                                    "type": "string",
                                    "example": "mar./2026"
                                },
                                "total": {
                                    "type": "integer"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "mentorias_por_disciplina": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "integer"
                        }
                    },
                    "mentorias_por_disciplina_detalhe": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "disciplinas_em_foco": {
                        "type": "object"
                    }
                },
                "type": "object"
            },
            "PermissionsMatrix": {
                "description": "Matriz RBAC: roles, permissions, pages (rotas admin) e matrix role→permissões. PUT sincroniza Spatie e exige `motivo`.",
                "type": "object",
                "additionalProperties": true
            },
            "JobVacancy": {
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "ativo": {
                        "type": "boolean"
                    },
                    "anuncio_site": {
                        "description": "Vaga em destaque no site (apenas uma ativa)",
                        "type": "boolean"
                    },
                    "titulo": {
                        "type": "string"
                    },
                    "empresa": {
                        "type": "string"
                    },
                    "localizacao": {
                        "type": "string"
                    },
                    "modalidade": {
                        "type": "string",
                        "enum": [
                            "presencial",
                            "remoto",
                            "hibrido"
                        ]
                    },
                    "tipo_contrato": {
                        "type": "string",
                        "enum": [
                            "clt",
                            "pj",
                            "estagio",
                            "temporario",
                            "freelance",
                            "outro"
                        ]
                    },
                    "descricao": {
                        "type": "string"
                    },
                    "requisitos": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "email_contato": {
                        "type": "string",
                        "format": "email",
                        "nullable": true
                    },
                    "link_candidatura": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    },
                    "updated_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "JobVacancyInput": {
                "properties": {
                    "ativo": {
                        "type": "boolean"
                    },
                    "anuncio_site": {
                        "type": "boolean"
                    },
                    "titulo": {
                        "type": "string"
                    },
                    "empresa": {
                        "type": "string"
                    },
                    "localizacao": {
                        "type": "string"
                    },
                    "modalidade": {
                        "type": "string",
                        "enum": [
                            "presencial",
                            "remoto",
                            "hibrido"
                        ]
                    },
                    "tipo_contrato": {
                        "type": "string",
                        "enum": [
                            "clt",
                            "pj",
                            "estagio",
                            "temporario",
                            "freelance",
                            "outro"
                        ]
                    },
                    "descricao": {
                        "type": "string"
                    },
                    "requisitos": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "email_contato": {
                        "type": "string",
                        "format": "email"
                    },
                    "link_candidatura": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "JobVacancyShare": {
                "properties": {
                    "ativo": {
                        "type": "boolean"
                    },
                    "titulo": {
                        "type": "string",
                        "example": "Desenvolvedor Full Stack"
                    },
                    "empresa": {
                        "type": "string",
                        "example": "Empresa X"
                    },
                    "localizacao": {
                        "type": "string",
                        "example": "São Paulo / Remoto"
                    },
                    "modalidade": {
                        "type": "string",
                        "enum": [
                            "presencial",
                            "remoto",
                            "hibrido"
                        ]
                    },
                    "tipo_contrato": {
                        "type": "string",
                        "enum": [
                            "clt",
                            "pj",
                            "estagio",
                            "temporario",
                            "freelance",
                            "outro"
                        ]
                    },
                    "descricao": {
                        "type": "string"
                    },
                    "requisitos": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "email_contato": {
                        "type": "string",
                        "format": "email"
                    },
                    "link_candidatura": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "atualizado_em": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "JobVacancyShareInput": {
                "description": "Corpo do anúncio (PUT); `atualizado_em` é definido pelo servidor.",
                "properties": {
                    "ativo": {
                        "type": "boolean"
                    },
                    "titulo": {
                        "type": "string"
                    },
                    "empresa": {
                        "type": "string"
                    },
                    "localizacao": {
                        "type": "string"
                    },
                    "modalidade": {
                        "type": "string",
                        "enum": [
                            "presencial",
                            "remoto",
                            "hibrido"
                        ]
                    },
                    "tipo_contrato": {
                        "type": "string",
                        "enum": [
                            "clt",
                            "pj",
                            "estagio",
                            "temporario",
                            "freelance",
                            "outro"
                        ]
                    },
                    "descricao": {
                        "type": "string"
                    },
                    "requisitos": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "email_contato": {
                        "type": "string",
                        "format": "email"
                    },
                    "link_candidatura": {
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    }
                },
                "type": "object"
            }
        },
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "description": "Obtenha o token em `POST /api/auth/login` e envie: `Authorization: Bearer {access_token}`",
                "bearerFormat": "JWT",
                "scheme": "bearer"
            }
        }
    },
    "tags": [
        {
            "name": "Inscrição pública",
            "description": "Formulário do site — sem token"
        },
        {
            "name": "Auth",
            "description": "JWT: login, registro, logout, /me"
        },
        {
            "name": "Utilitários",
            "description": "CEP (público)"
        },
        {
            "name": "Admin — Inscrições",
            "description": "JWT + permissão `view inscricoes`"
        },
        {
            "name": "Dashboard",
            "description": "JWT + `view dashboard`"
        },
        {
            "name": "Perfil",
            "description": "JWT — utilizador autenticado"
        },
        {
            "name": "Permissões",
            "description": "JWT — matriz (Master) ou `GET /me/permissions` (páginas + permissões)"
        },
        {
            "name": "Auditoria",
            "description": "JWT + `view audit logs` — alterações críticas"
        },
        {
            "name": "Utilizadores",
            "description": "JWT + `view users` / `manage users`"
        },
        {
            "name": "Associados",
            "description": "JWT + permissões associados"
        },
        {
            "name": "Projetos",
            "description": "JWT + permissões projetos"
        },
        {
            "name": "Financeiro",
            "description": "JWT + permissões financeiro"
        },
        {
            "name": "Diretoria",
            "description": "JWT + permissões diretoria"
        },
        {
            "name": "Mentoria — catálogo",
            "description": "JWT + `view mentorias`"
        },
        {
            "name": "Mentoria — sessões",
            "description": "JWT + permissões mentorias (listagem e CRUD)"
        },
        {
            "name": "Relatórios",
            "description": "JWT + `view reports` — ficheiros Excel/CSV"
        },
        {
            "name": "Vagas",
            "description": "CRUD de vagas — listagem pública (ativas), admin (`view vagas` / `manage vagas`), anúncio em `/vagas/anuncio`"
        }
    ]
}