{
  "openapi": "3.1.0",
  "info": {
    "title": "API do Presente",
    "version": "1",
    "description": "Referência dos endpoints, parâmetros, modelos e erros da API do Presente. Cada rota indica quem pode chamá-la e o limite de uso. As rotas são as mesmas que o aplicativo usa: não há uma API separada para integrações, e as rotas internas não têm garantia de estabilidade. Para os conceitos (autenticação, permissões, paginação, erros), comece pelo [guia de integração](/integrar/)."
  },
  "servers": [
    {
      "url": "https://app.presente.app.br/api",
      "description": "Produção"
    },
    {
      "url": "https://demo.presente.app.br/api",
      "description": "Demonstração (dados fictícios)"
    }
  ],
  "security": [
    {
      "bearer": []
    }
  ],
  "paths": {
    "/auditoria": {
      "get": {
        "operationId": "Auditoria_lista",
        "tags": [
          "Auditoria"
        ],
        "parameters": [
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "acao",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_.]{0,59}$"
            }
          },
          {
            "name": "instituicaoId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "atorId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fuso",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200,
              "pattern": "^[A-Za-z0-9_-]+$"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditoriaPagina"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR"
        },
        "summary": "Lista eventos de auditoria da instituição"
      }
    },
    "/auditoria/estatisticas": {
      "get": {
        "operationId": "Auditoria_estatisticas",
        "tags": [
          "Auditoria"
        ],
        "parameters": [
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "acao",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_.]{0,59}$"
            }
          },
          {
            "name": "instituicaoId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "atorId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fuso",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditoriaEstatisticas"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR"
        },
        "summary": "Estatísticas dos eventos de auditoria"
      }
    },
    "/auditoria/exportar": {
      "get": {
        "operationId": "Auditoria_exporta",
        "tags": [
          "Auditoria"
        ],
        "parameters": [
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "acao",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_.]{0,59}$"
            }
          },
          {
            "name": "instituicaoId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "atorId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fuso",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "summary": "Exporta a auditoria em CSV"
      }
    },
    "/auth/aceitar-convite": {
      "post": {
        "operationId": "Auth_aceitarConvite",
        "tags": [
          "Auth"
        ],
        "parameters": [
          {
            "name": "user-agent",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AceitarConviteInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sessao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Aceita o convite e define a senha"
      }
    },
    "/auth/esqueci-senha": {
      "post": {
        "operationId": "Auth_esqueciSenha",
        "tags": [
          "Auth"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EsqueciSenhaInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "OK"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 5,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Pede o e-mail de recuperação de senha",
        "description": "Responde sempre da mesma forma, exista ou não o e-mail, para não revelar quem tem cadastro."
      }
    },
    "/auth/login": {
      "post": {
        "operationId": "Auth_login",
        "tags": [
          "Auth"
        ],
        "parameters": [
          {
            "name": "user-agent",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sessao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Entra com e-mail e senha",
        "description": "Devolve `accessToken` (válido por 15 minutos) e `refreshToken` (uso único, até 30 dias). Cinco falhas seguidas em 15 minutos bloqueiam a tentativa com 429 e `retryAfterSeg`."
      }
    },
    "/auth/logout": {
      "post": {
        "operationId": "Auth_logout",
        "tags": [
          "Auth"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoutInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Encerra a sessão do token de renovação"
      }
    },
    "/auth/logout-todas": {
      "post": {
        "operationId": "Auth_logoutTodas",
        "tags": [
          "Auth"
        ],
        "parameters": [],
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Encerra todas as sessões da conta"
      }
    },
    "/auth/me": {
      "get": {
        "operationId": "Auth_me",
        "tags": [
          "Auth"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Dados da pessoa autenticada e seus vínculos"
      }
    },
    "/auth/primeiro-acesso/codigo": {
      "post": {
        "operationId": "Auth_primeiroAcessoCodigo",
        "tags": [
          "Auth"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrimeiroAcessoSolicitarInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "OK"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 5,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Pede o código do primeiro acesso"
      }
    },
    "/auth/primeiro-acesso/confirmar": {
      "post": {
        "operationId": "Auth_primeiroAcessoConfirmar",
        "tags": [
          "Auth"
        ],
        "parameters": [
          {
            "name": "user-agent",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrimeiroAcessoConfirmarInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sessao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Confirma o primeiro acesso com o código"
      }
    },
    "/auth/redefinir-senha": {
      "post": {
        "operationId": "Auth_redefinirSenha",
        "tags": [
          "Auth"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedefinirSenhaInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Redefine a senha com o token do e-mail"
      }
    },
    "/auth/refresh": {
      "post": {
        "operationId": "Auth_refresh",
        "tags": [
          "Auth"
        ],
        "parameters": [
          {
            "name": "user-agent",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sessao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Troca o token de renovação por uma sessão nova",
        "description": "O token de renovação é de uso único: reusar um token já usado encerra todas as sessões da conta. Guarde sempre o novo par devolvido."
      }
    },
    "/auth/trocar-senha": {
      "post": {
        "operationId": "Auth_trocarSenha",
        "tags": [
          "Auth"
        ],
        "parameters": [
          {
            "name": "user-agent",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrocarSenhaInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sessao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Troca a própria senha"
      }
    },
    "/contato": {
      "post": {
        "operationId": "Contato_enviar",
        "tags": [
          "Contato"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContatoSite"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "OK"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 3,
          "janelaSeg": 600
        },
        "security": [],
        "summary": "Envia uma mensagem pelo formulário de contato"
      }
    },
    "/disciplinas/{disciplinaId}": {
      "get": {
        "operationId": "Disciplinas_le",
        "tags": [
          "Disciplinas"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DisciplinaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Lê uma disciplina"
      },
      "patch": {
        "operationId": "Disciplinas_atualiza",
        "tags": [
          "Disciplinas"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DisciplinaAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DisciplinaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Atualiza uma disciplina"
      }
    },
    "/disciplinas/{disciplinaId}/atividades-profissionais": {
      "get": {
        "operationId": "Catalogo_lista",
        "tags": [
          "Catalogo"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadesProfissionais"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Lista o catálogo de atividades da disciplina"
      },
      "post": {
        "operationId": "Catalogo_cria",
        "tags": [
          "Catalogo"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtividadeProfissionalCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadeProfissionalDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Cria um item no catálogo da disciplina"
      }
    },
    "/disciplinas/{disciplinaId}/atividades-profissionais/{itemId}": {
      "patch": {
        "operationId": "Catalogo_atualiza",
        "tags": [
          "Catalogo"
        ],
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtividadeProfissionalAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadeProfissionalDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Atualiza um item do catálogo"
      }
    },
    "/disciplinas/{disciplinaId}/atividades-profissionais/{itemId}/mesclar": {
      "post": {
        "operationId": "Catalogo_mescla",
        "tags": [
          "Catalogo"
        ],
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtividadeProfissionalMesclar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadeProfissionalDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Mescla um item do catálogo em outro"
      }
    },
    "/disciplinas/{disciplinaId}/criterios": {
      "get": {
        "operationId": "Criterios_lista",
        "tags": [
          "Criterios"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Criterios"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Lista os critérios de avaliação da disciplina"
      },
      "post": {
        "operationId": "Criterios_cria",
        "tags": [
          "Criterios"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriterioCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CriterioDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Cria um critério de avaliação"
      }
    },
    "/disciplinas/{disciplinaId}/criterios/{criterioId}": {
      "patch": {
        "operationId": "Criterios_atualiza",
        "tags": [
          "Criterios"
        ],
        "parameters": [
          {
            "name": "criterioId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriterioAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CriterioDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Atualiza um critério de avaliação"
      }
    },
    "/disciplinas/{disciplinaId}/turmas": {
      "get": {
        "operationId": "Turmas_lista",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TurmaDto"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER"
        },
        "summary": "Lista as turmas de uma disciplina"
      },
      "post": {
        "operationId": "Turmas_cria",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "disciplinaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurmaCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurmaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "disciplinaId": "params.disciplinaId"
          }
        },
        "summary": "Cria uma turma na disciplina",
        "description": "Não é idempotente: uma turma não tem identificador único, então repetir a chamada cria outra turma."
      }
    },
    "/evolucao/alunos": {
      "get": {
        "operationId": "Evolucao_alunos",
        "tags": [
          "Evolucao"
        ],
        "parameters": [
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvolucaoAlunos"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 300,
          "janelaSeg": 60
        },
        "summary": "Lista alunos com a evolução que a pessoa pode ver"
      }
    },
    "/feedback": {
      "post": {
        "operationId": "Perfil_feedback",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SusRespostaInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SusEnviada"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "summary": "Envia a resposta da pesquisa de satisfação"
      }
    },
    "/feedback/resumo": {
      "get": {
        "operationId": "Perfil_resumoFeedback",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SusResumo"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "PLATAFORMA"
        },
        "summary": "Resumo da pesquisa de satisfação"
      }
    },
    "/health": {
      "get": {
        "operationId": "Health_get",
        "tags": [
          "Health"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "security": [],
        "summary": "Verifica se a API está no ar",
        "description": "Não exige login. Serve para monitorar se o serviço responde."
      }
    },
    "/instituicoes": {
      "get": {
        "operationId": "Instituicoes_lista",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/InstituicaoDto"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER"
        },
        "summary": "Lista as instituições que a pessoa enxerga"
      },
      "post": {
        "operationId": "Instituicoes_cria",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstituicaoCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstituicaoDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "PLATAFORMA"
        },
        "summary": "Cria uma instituição e convida o primeiro curador"
      }
    },
    "/instituicoes/{instituicaoId}": {
      "get": {
        "operationId": "Instituicoes_le",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstituicaoDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lê uma instituição"
      },
      "patch": {
        "operationId": "Instituicoes_atualiza",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstituicaoAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstituicaoDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Atualiza uma instituição"
      }
    },
    "/instituicoes/{instituicaoId}/disciplinas": {
      "get": {
        "operationId": "Disciplinas_lista",
        "tags": [
          "Disciplinas"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DisciplinaDto"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER"
        },
        "summary": "Lista as disciplinas de uma instituição"
      },
      "post": {
        "operationId": "Disciplinas_cria",
        "tags": [
          "Disciplinas"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DisciplinaCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DisciplinaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Cria uma disciplina na instituição",
        "description": "`sigla` e `nome` são únicos na instituição: repetir devolve 409 `taken`."
      }
    },
    "/instituicoes/{instituicaoId}/importacoes/pessoas": {
      "post": {
        "operationId": "Importacao_pessoas",
        "tags": [
          "Importacao"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportacaoEntrada"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportacaoRelatorio"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "summary": "Importa pessoas (equipe e alunos) por CSV",
        "description": "O CSV vai como texto no campo `csv` (máx. 500 linhas e 90 000 caracteres). Use `modo: simular` para ver o relatório antes de `aplicar`. A importação é idempotente: quem já existe volta como `JA_EXISTE`."
      }
    },
    "/instituicoes/{instituicaoId}/parametros": {
      "get": {
        "operationId": "Parametros_leInstituicao",
        "tags": [
          "Parametros"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParametrosDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lê os parâmetros da instituição"
      },
      "put": {
        "operationId": "Parametros_atualizaInstituicao",
        "tags": [
          "Parametros"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParametrosInstituicaoAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParametrosDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Atualiza os parâmetros da instituição"
      }
    },
    "/instituicoes/{instituicaoId}/politica-privacidade": {
      "get": {
        "operationId": "Instituicoes_politicaVigente",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoliticaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lê a política de privacidade vigente da instituição"
      },
      "put": {
        "operationId": "Instituicoes_publicaPolitica",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TermoPublicar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoliticaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Publica uma nova versão da política de privacidade"
      }
    },
    "/instituicoes/{instituicaoId}/termo": {
      "get": {
        "operationId": "Instituicoes_termoVigente",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TermoDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lê o termo de uso vigente da instituição"
      },
      "put": {
        "operationId": "Instituicoes_publicaTermo",
        "tags": [
          "Instituicoes"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TermoPublicar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TermoDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Publica uma nova versão do termo de uso"
      }
    },
    "/instituicoes/{instituicaoId}/usuarios": {
      "get": {
        "operationId": "Usuarios_lista",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "tipo",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "equipe",
                "alunos"
              ]
            }
          },
          {
            "name": "papel",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CURADOR",
                "PRECEPTOR",
                "COORDENADOR",
                "PROFESSOR",
                "AUXILIAR",
                "ALUNO"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CONVIDADO",
                "ATIVO",
                "SUSPENSO"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsuarioLista"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lista as pessoas da instituição"
      },
      "post": {
        "operationId": "Usuarios_criaEquipe",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipeCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsuarioDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "x-presente-limite": {
          "max": 120,
          "janelaSeg": 60
        },
        "summary": "Cria uma pessoa da equipe e dá o vínculo"
      }
    },
    "/instituicoes/{instituicaoId}/usuarios/{usuarioId}": {
      "get": {
        "operationId": "Usuarios_le",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "usuarioId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsuarioDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lê uma pessoa da instituição"
      },
      "patch": {
        "operationId": "Usuarios_atualiza",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "usuarioId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsuarioAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsuarioDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Atualiza uma pessoa da instituição"
      }
    },
    "/instituicoes/{instituicaoId}/usuarios/{usuarioId}/convite": {
      "post": {
        "operationId": "Usuarios_reenviaConvite",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "usuarioId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "x-presente-limite": {
          "max": 30,
          "janelaSeg": 60
        },
        "summary": "Reenvia o convite por e-mail"
      }
    },
    "/instituicoes/{instituicaoId}/vinculos": {
      "get": {
        "operationId": "Usuarios_listaVinculos",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "usuarioId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/VinculoItem"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Lista os vínculos da instituição"
      },
      "post": {
        "operationId": "Usuarios_criaVinculo",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VinculoCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VinculoItem"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "x-presente-limite": {
          "max": 120,
          "janelaSeg": 60
        },
        "summary": "Cria um vínculo (papel e escopo) para uma pessoa"
      }
    },
    "/instituicoes/{instituicaoId}/vinculos/{vinculoId}": {
      "patch": {
        "operationId": "Usuarios_atualizaVinculo",
        "tags": [
          "Usuarios"
        ],
        "parameters": [
          {
            "name": "vinculoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "instituicaoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VinculoAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VinculoItem"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "ADMINISTRAR",
          "alvo": {
            "instituicaoId": "params.instituicaoId"
          }
        },
        "summary": "Atualiza um vínculo"
      }
    },
    "/matriculas/{matriculaId}/evolucao": {
      "get": {
        "operationId": "Evolucao_daMatricula",
        "tags": [
          "Evolucao"
        ],
        "parameters": [
          {
            "name": "matriculaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvolucaoAluno"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 300,
          "janelaSeg": 60
        },
        "summary": "Evolução de um aluno (por matrícula)"
      }
    },
    "/me": {
      "delete": {
        "operationId": "Conta_exclui",
        "tags": [
          "Conta"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExcluirContaInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "summary": "Exclui a própria conta (confirma com a senha)"
      },
      "patch": {
        "operationId": "Perfil_atualiza",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PerfilAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Atualiza o próprio perfil"
      }
    },
    "/me/atividades": {
      "get": {
        "operationId": "Me_atividades",
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 100,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MinhasAtividades"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lista as atividades da pessoa como aluna"
      }
    },
    "/me/atividades/{atividadeId}/presenca": {
      "post": {
        "operationId": "PresencaAluno_solicita",
        "tags": [
          "PresencaAluno"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PresencaSolicitar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresencaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Pede a presença em uma atividade"
      }
    },
    "/me/atividades/{atividadeId}/presenca/relato": {
      "put": {
        "operationId": "PresencaAluno_editaRelato",
        "tags": [
          "PresencaAluno"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelatoEditar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresencaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Edita o relato da própria presença"
      }
    },
    "/me/atividades/{atividadeId}/qr": {
      "get": {
        "operationId": "PresencaAluno_qr",
        "tags": [
          "PresencaAluno"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QrToken"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Gera o QR da atividade para o aluno"
      }
    },
    "/me/cockpit": {
      "get": {
        "operationId": "Me_inicio",
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "instituicaoId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cockpit"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Início da pessoa (aluno, avaliador e gestão)"
      }
    },
    "/me/conversas": {
      "get": {
        "operationId": "Conversa_minhas",
        "tags": [
          "Conversa"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MinhasConversas"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lista as conversas de turma da pessoa"
      }
    },
    "/me/dispositivos": {
      "post": {
        "operationId": "Dispositivos_registra",
        "tags": [
          "Dispositivos"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DispositivoRegistrar"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "summary": "Registra um aparelho para receber push"
      },
      "delete": {
        "operationId": "Dispositivos_remove",
        "tags": [
          "Dispositivos"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DispositivoRemover"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "summary": "Remove um aparelho do push"
      }
    },
    "/me/estatisticas": {
      "get": {
        "operationId": "Me_estatisticas",
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "turmaId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaAtiva",
            "in": "query",
            "required": false,
            "schema": {
              "default": "true",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Estatisticas"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Estatísticas de presença da pessoa"
      }
    },
    "/me/evolucao": {
      "get": {
        "operationId": "Evolucao_minha",
        "tags": [
          "Evolucao"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvolucaoAluno"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 300,
          "janelaSeg": 60
        },
        "summary": "Evolução da própria pessoa por disciplina"
      }
    },
    "/me/foto": {
      "get": {
        "operationId": "Perfil_foto",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "image/*": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Baixa a foto do próprio perfil"
      },
      "put": {
        "operationId": "Perfil_salvaFoto",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "description": "image/jpeg, image/png ou image/webp",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerfilDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "summary": "Envia a foto do próprio perfil"
      },
      "delete": {
        "operationId": "Perfil_removeFoto",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Remove a foto do próprio perfil"
      }
    },
    "/me/notificacoes": {
      "get": {
        "operationId": "Notificacoes_lista",
        "tags": [
          "Notificacoes"
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200,
              "pattern": "^[A-Za-z0-9_-]+$"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "naoLidas",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificacoesPagina"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lista as notificações da pessoa"
      }
    },
    "/me/notificacoes/contador": {
      "get": {
        "operationId": "Notificacoes_contador",
        "tags": [
          "Notificacoes"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContadorNotificacoes"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Quantas notificações não foram lidas"
      }
    },
    "/me/notificacoes/lidas": {
      "post": {
        "operationId": "Notificacoes_lidas",
        "tags": [
          "Notificacoes"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarcarLidas"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContadorNotificacoes"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "summary": "Marca notificações como lidas"
      }
    },
    "/me/notificacoes/preferencias": {
      "get": {
        "operationId": "Notificacoes_preferencias",
        "tags": [
          "Notificacoes"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Preferencias"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lê as preferências de notificação"
      },
      "put": {
        "operationId": "Notificacoes_atualiza",
        "tags": [
          "Notificacoes"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreferenciasAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Preferencias"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 30,
          "janelaSeg": 60
        },
        "summary": "Atualiza as preferências de notificação"
      }
    },
    "/me/painel": {
      "get": {
        "operationId": "Me_painel",
        "tags": [
          "Me"
        ],
        "parameters": [
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "instituicaoId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "disciplinaId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "alunoId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "estados",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "turmaAtiva",
            "in": "query",
            "required": false,
            "schema": {
              "default": "true",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 300,
              "type": "integer",
              "minimum": 1,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Painel"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Painel de atividades da pessoa, com filtros"
      }
    },
    "/me/perfil": {
      "get": {
        "operationId": "Perfil_perfilCompleto",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerfilDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lê o próprio perfil completo"
      }
    },
    "/me/sessoes": {
      "get": {
        "operationId": "Perfil_sessoes",
        "tags": [
          "Perfil"
        ],
        "parameters": [
          {
            "name": "x-refresh-token",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessoesAtivas"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lista as conexões ativas da pessoa"
      }
    },
    "/me/sessoes/{id}": {
      "delete": {
        "operationId": "Perfil_encerraSessao",
        "tags": [
          "Perfil"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Encerra uma conexão"
      }
    },
    "/me/sessoes/encerrar-outras": {
      "post": {
        "operationId": "Perfil_encerraOutras",
        "tags": [
          "Perfil"
        ],
        "parameters": [
          {
            "name": "x-refresh-token",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EncerrarOutrasResultado"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "summary": "Encerra todas as outras conexões"
      }
    },
    "/me/termos": {
      "get": {
        "operationId": "Perfil_termos",
        "tags": [
          "Perfil"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TermosDosMeus"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Termos e políticas vigentes das minhas instituições"
      }
    },
    "/me/turmas/{turmaId}/autoavaliacao-final": {
      "get": {
        "operationId": "Autoavaliacao_minha",
        "tags": [
          "Autoavaliacao"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AutoavaliacaoDoAluno"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Lê a própria autoavaliação final da turma"
      },
      "put": {
        "operationId": "Autoavaliacao_grava",
        "tags": [
          "Autoavaliacao"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AutoavaliacaoEscrever"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AutoavaliacaoDoAluno"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 120,
          "janelaSeg": 60
        },
        "summary": "Grava a autoavaliação final da turma"
      }
    },
    "/me/turmas/{turmaId}/avaliacao": {
      "get": {
        "operationId": "Avaliacao_minha",
        "tags": [
          "Avaliacao"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvaliacaoMatricula"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Minhas notas e avaliação em uma turma"
      }
    },
    "/me/turmas/{turmaId}/feedback-final": {
      "get": {
        "operationId": "Feedback_meu",
        "tags": [
          "Feedback"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedbackFinalDoAluno"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Meu feedback final em uma turma"
      }
    },
    "/parametros": {
      "get": {
        "operationId": "Parametros_lePlataforma",
        "tags": [
          "Parametros"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParametrosDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "PLATAFORMA"
        },
        "summary": "Lê os parâmetros da plataforma"
      },
      "put": {
        "operationId": "Parametros_atualizaPlataforma",
        "tags": [
          "Parametros"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParametrosPlataformaAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParametrosDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "PLATAFORMA"
        },
        "summary": "Atualiza os parâmetros da plataforma"
      }
    },
    "/presencas/pendentes": {
      "get": {
        "operationId": "PresencaAvaliador_filaAgregada",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FilaAvaliacao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR"
        },
        "summary": "Fila de pedidos pendentes de todas as turmas"
      }
    },
    "/presencas/qr": {
      "post": {
        "operationId": "PresencaAvaliador_resolveQr",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QrResolver"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QrResolvido"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 600,
          "janelaSeg": 60
        },
        "summary": "Resolve o QR lido e abre o pedido de presença"
      }
    },
    "/publico/excluir-conta": {
      "post": {
        "operationId": "Conta_solicita",
        "tags": [
          "Conta"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExcluirContaSolicitarInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "OK"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 5,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Pede a exclusão de conta pela web (passo 1)",
        "description": "Não exige login. Sempre responde da mesma forma, exista ou não a conta, para não revelar quem tem cadastro."
      }
    },
    "/publico/excluir-conta/confirmar": {
      "post": {
        "operationId": "Conta_confirma",
        "tags": [
          "Conta"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExcluirContaConfirmarInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Confirma a exclusão de conta pelo link (passo 2)"
      }
    },
    "/publico/privacidade/{sigla}": {
      "get": {
        "operationId": "PoliticaPublica_politica",
        "tags": [
          "PoliticaPublica"
        ],
        "parameters": [
          {
            "name": "sigla",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoliticaPublica"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Política de privacidade pública de uma instituição"
      }
    },
    "/publico/push-web": {
      "get": {
        "operationId": "PushWeb_config",
        "tags": [
          "PushWeb"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PushWebConfig"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "publica"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "security": [],
        "summary": "Configuração pública do push no navegador"
      }
    },
    "/turmas": {
      "get": {
        "operationId": "Turmas_listaTodas",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "disciplinaId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/TurmaDto"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER"
        },
        "summary": "Lista as turmas que a pessoa enxerga"
      }
    },
    "/turmas/{turmaId}": {
      "get": {
        "operationId": "Turmas_le",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurmaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lê uma turma"
      },
      "patch": {
        "operationId": "Turmas_atualiza",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurmaAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurmaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Atualiza uma turma"
      }
    },
    "/turmas/{turmaId}/atividades": {
      "get": {
        "operationId": "Atividades_lista",
        "tags": [
          "Atividades"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/AtividadeDto"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lista as atividades de uma turma"
      },
      "post": {
        "operationId": "Atividades_cria",
        "tags": [
          "Atividades"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtividadeCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadeDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Cria uma atividade na turma"
      }
    },
    "/turmas/{turmaId}/atividades-profissionais": {
      "get": {
        "operationId": "Catalogo_daTurma",
        "tags": [
          "Catalogo"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadesProfissionais"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Catálogo de atividades da disciplina da turma"
      }
    },
    "/turmas/{turmaId}/atividades/{atividadeId}": {
      "get": {
        "operationId": "Atividades_le",
        "tags": [
          "Atividades"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadeDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lê uma atividade"
      },
      "delete": {
        "operationId": "Atividades_remove",
        "tags": [
          "Atividades"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sem conteúdo"
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Remove uma atividade (se não tiver presença)",
        "description": "Só é possível se a atividade ainda não tiver presença; caso contrário, cancele-a em vez de removê-la."
      },
      "patch": {
        "operationId": "Atividades_atualiza",
        "tags": [
          "Atividades"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtividadeAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtividadeDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Atualiza uma atividade"
      }
    },
    "/turmas/{turmaId}/atividades/{atividadeId}/matriculas/{matriculaId}/presenca": {
      "put": {
        "operationId": "PresencaAvaliador_avalia",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [
          {
            "name": "matriculaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AvaliarPresenca"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresencaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Confirma ou rejeita a presença de um aluno"
      }
    },
    "/turmas/{turmaId}/atividades/{atividadeId}/presencas": {
      "get": {
        "operationId": "PresencaAvaliador_daAtividade",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [
          {
            "name": "atividadeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresencaLinhas"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lista os pedidos de presença de uma atividade"
      }
    },
    "/turmas/{turmaId}/auxiliares": {
      "get": {
        "operationId": "Turmas_auxiliares",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/VinculoItem"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lista os auxiliares da turma"
      }
    },
    "/turmas/{turmaId}/conversa": {
      "get": {
        "operationId": "Conversa_lista",
        "tags": [
          "Conversa"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "antes",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200,
              "pattern": "^[A-Za-z0-9_-]+$"
            }
          },
          {
            "name": "depois",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200,
              "pattern": "^[A-Za-z0-9_-]+$"
            }
          },
          {
            "name": "alteradasDesde",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConversaPagina"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Lista as mensagens da conversa da turma"
      }
    },
    "/turmas/{turmaId}/conversa/mensagens": {
      "post": {
        "operationId": "Conversa_envia",
        "tags": [
          "Conversa"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MensagemTexto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MensagemDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "summary": "Envia uma mensagem à conversa da turma"
      }
    },
    "/turmas/{turmaId}/conversa/mensagens/{mensagemId}": {
      "delete": {
        "operationId": "Conversa_remove",
        "tags": [
          "Conversa"
        ],
        "parameters": [
          {
            "name": "mensagemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MensagemDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "summary": "Remove uma mensagem"
      },
      "patch": {
        "operationId": "Conversa_edita",
        "tags": [
          "Conversa"
        ],
        "parameters": [
          {
            "name": "mensagemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MensagemTexto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MensagemDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "autenticada"
        },
        "x-presente-limite": {
          "max": 60,
          "janelaSeg": 60
        },
        "summary": "Edita uma mensagem"
      }
    },
    "/turmas/{turmaId}/criterios": {
      "get": {
        "operationId": "Criterios_daTurma",
        "tags": [
          "Criterios"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Criterios"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Critérios de avaliação da disciplina da turma"
      }
    },
    "/turmas/{turmaId}/estatisticas/exportar": {
      "get": {
        "operationId": "EstatisticasTurma_exporta",
        "tags": [
          "EstatisticasTurma"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "x-presente-limite": {
          "max": 10,
          "janelaSeg": 60
        },
        "summary": "Exporta as estatísticas da turma em CSV"
      }
    },
    "/turmas/{turmaId}/feedback-final": {
      "get": {
        "operationId": "Feedback_daTurma",
        "tags": [
          "Feedback"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedbackFinalTurma"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lista os feedbacks finais da turma, por aluno"
      }
    },
    "/turmas/{turmaId}/frequencia": {
      "get": {
        "operationId": "Frequencia_daTurma",
        "tags": [
          "Frequencia"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "de",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "ate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FrequenciaTurma"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Matriz de frequência da turma"
      }
    },
    "/turmas/{turmaId}/importacoes/alunos": {
      "post": {
        "operationId": "Importacao_alunos",
        "tags": [
          "Importacao"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportacaoEntrada"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportacaoRelatorio"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "summary": "Importa alunos da turma por CSV",
        "description": "O CSV vai como texto no campo `csv` (máx. 500 linhas e 90 000 caracteres). Use `modo: simular` antes de `aplicar`. Repetir a importação não duplica matrículas."
      }
    },
    "/turmas/{turmaId}/importacoes/atividades": {
      "post": {
        "operationId": "Importacao_atividades",
        "tags": [
          "Importacao"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportacaoEntrada"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportacaoRelatorio"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "x-presente-limite": {
          "max": 20,
          "janelaSeg": 60
        },
        "summary": "Importa atividades da turma por CSV",
        "description": "Uma atividade é reconhecida pela data, hora de início e descrição; a importação só cria, nunca altera nem apaga. Use `modo: simular` antes de `aplicar`."
      }
    },
    "/turmas/{turmaId}/matriculas": {
      "get": {
        "operationId": "Matriculas_lista",
        "tags": [
          "Matriculas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "schema": {
              "default": 50,
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "deslocamento",
            "in": "query",
            "required": false,
            "schema": {
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 100000
            }
          },
          {
            "name": "inativos",
            "in": "query",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MatriculaDto"
                      }
                    },
                    "total": {
                      "type": "integer"
                    }
                  },
                  "required": [
                    "items",
                    "total"
                  ]
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lista as matrículas da turma"
      },
      "post": {
        "operationId": "Matriculas_cria",
        "tags": [
          "Matriculas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MatriculaCriar"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MatriculaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "x-presente-limite": {
          "max": 120,
          "janelaSeg": 60
        },
        "summary": "Matricula um aluno na turma",
        "description": "Informe `usuarioId` (aluno já cadastrado) ou `email` e `nome` (conta nova, com convite por e-mail)."
      }
    },
    "/turmas/{turmaId}/matriculas/{matriculaId}": {
      "patch": {
        "operationId": "Matriculas_atualiza",
        "tags": [
          "Matriculas"
        ],
        "parameters": [
          {
            "name": "matriculaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MatriculaAtualizar"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MatriculaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Ativa ou desativa uma matrícula",
        "description": "Desativar a matrícula só alterna `ativo`: nada é apagado, e reativar devolve o aluno à turma."
      }
    },
    "/turmas/{turmaId}/matriculas/{matriculaId}/avaliacao": {
      "get": {
        "operationId": "Avaliacao_daMatricula",
        "tags": [
          "Avaliacao"
        ],
        "parameters": [
          {
            "name": "matriculaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvaliacaoMatricula"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Notas e avaliação de um aluno na turma"
      }
    },
    "/turmas/{turmaId}/matriculas/{matriculaId}/feedback-final": {
      "get": {
        "operationId": "Feedback_daMatricula",
        "tags": [
          "Feedback"
        ],
        "parameters": [
          {
            "name": "matriculaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedbackFinalMatricula"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Lê o feedback final de um aluno"
      },
      "put": {
        "operationId": "Feedback_grava",
        "tags": [
          "Feedback"
        ],
        "parameters": [
          {
            "name": "matriculaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackFinalEscrever"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedbackFinalMatricula"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Grava o feedback final de um aluno"
      }
    },
    "/turmas/{turmaId}/periodo": {
      "put": {
        "operationId": "Turmas_definePeriodo",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurmaPeriodo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurmaDto"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "LER",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Define o período (início e fim) da turma"
      }
    },
    "/turmas/{turmaId}/presencas/{presencaId}/relato/versoes": {
      "get": {
        "operationId": "PresencaAvaliador_versoesRelato",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [
          {
            "name": "presencaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatoVersoes"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Versões anteriores do relato de uma presença"
      }
    },
    "/turmas/{turmaId}/presencas/confirmar-lote": {
      "post": {
        "operationId": "PresencaAvaliador_confirmaLote",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmarLote"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfirmarLoteResultado"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Confirma vários pedidos de presença de uma vez"
      }
    },
    "/turmas/{turmaId}/presencas/pendentes": {
      "get": {
        "operationId": "PresencaAvaliador_pendentes",
        "tags": [
          "PresencaAvaliador"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pendentes"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "AVALIAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "Fila de pedidos pendentes da turma"
      }
    },
    "/turmas/{turmaId}/prontidao": {
      "get": {
        "operationId": "Turmas_prontidao",
        "tags": [
          "Turmas"
        ],
        "parameters": [
          {
            "name": "turmaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurmaProntidao"
                }
              }
            }
          },
          "default": {
            "description": "Erro",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErroApi"
                }
              }
            }
          }
        },
        "x-presente-acesso": {
          "tipo": "acesso",
          "capacidade": "CADASTRAR",
          "alvo": {
            "turmaId": "params.turmaId"
          }
        },
        "summary": "O que já está pronto na turma (contagens)",
        "description": "Devolve só contagens (alunos com acesso, avaliadores, atividades futuras…), nunca nomes nem e-mails."
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "AceitarConviteInput": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "minLength": 20,
            "maxLength": 200
          },
          "senha": {
            "$ref": "#/components/schemas/Senha"
          },
          "nationality": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "pattern": "^[A-Za-z]{2}$"
          },
          "locale": {
            "type": "string",
            "enum": [
              "pt-BR",
              "es",
              "en-US"
            ]
          },
          "aceites": {
            "default": [],
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "documento": {
                  "type": "string",
                  "enum": [
                    "TERMO_USO",
                    "POLITICA_PRIVACIDADE"
                  ]
                },
                "versao": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 20
                }
              },
              "required": [
                "documento",
                "versao"
              ]
            },
            "description": "Termos aceitos (versão do documento vigente)."
          }
        },
        "required": [
          "token",
          "senha"
        ]
      },
      "AtividadeAtualizar": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Data"
          },
          "atividadeProfissionalId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "descricao": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "observacoes": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 5000
              },
              {
                "type": "null"
              }
            ]
          },
          "local": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "obrigatoria": {
            "type": "boolean"
          },
          "cancelada": {
            "type": "boolean"
          },
          "cercaAtiva": {
            "type": "boolean"
          },
          "cercaRaioM": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 10,
                "maximum": 5000
              },
              {
                "type": "null"
              }
            ]
          },
          "lat": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              },
              {
                "type": "null"
              }
            ]
          },
          "lng": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "AtividadeCriar": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Data"
          },
          "atividadeProfissionalId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "descricao": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "observacoes": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 5000
              },
              {
                "type": "null"
              }
            ]
          },
          "local": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "obrigatoria": {
            "type": "boolean"
          },
          "cancelada": {
            "type": "boolean"
          },
          "cercaAtiva": {
            "type": "boolean"
          },
          "cercaRaioM": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 10,
                "maximum": 5000
              },
              {
                "type": "null"
              }
            ]
          },
          "lat": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              },
              {
                "type": "null"
              }
            ]
          },
          "lng": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "data"
        ]
      },
      "AtividadeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "turmaId": {
            "type": "string",
            "format": "uuid"
          },
          "data": {
            "$ref": "#/components/schemas/Data"
          },
          "horaInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "atividadeProfissionalId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "atividadeProfissionalNome": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nome do item do catálogo (para listas e telas que não carregam o catálogo)."
          },
          "descricao": {
            "type": [
              "string",
              "null"
            ]
          },
          "observacoes": {
            "type": [
              "string",
              "null"
            ]
          },
          "local": {
            "type": [
              "string",
              "null"
            ]
          },
          "obrigatoria": {
            "type": "boolean"
          },
          "cancelada": {
            "type": "boolean"
          },
          "cercaAtiva": {
            "type": "boolean"
          },
          "cercaRaioM": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "lat": {
            "type": [
              "number",
              "null"
            ]
          },
          "lng": {
            "type": [
              "number",
              "null"
            ]
          },
          "comPresencas": {
            "type": "boolean",
            "description": "Já existem presenças: data e hora ficam travadas."
          }
        },
        "required": [
          "id",
          "turmaId",
          "data",
          "horaInicio",
          "horaFim",
          "atividadeProfissionalId",
          "atividadeProfissionalNome",
          "descricao",
          "observacoes",
          "local",
          "obrigatoria",
          "cancelada",
          "cercaAtiva",
          "cercaRaioM",
          "lat",
          "lng",
          "comPresencas"
        ],
        "additionalProperties": false
      },
      "AtividadeProfissionalAtualizar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "descricao": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "ativo": {
            "type": "boolean"
          }
        }
      },
      "AtividadeProfissionalCriar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "descricao": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "nome"
        ]
      },
      "AtividadeProfissionalDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "disciplinaId": {
            "type": "string",
            "format": "uuid"
          },
          "nome": {
            "type": "string"
          },
          "descricao": {
            "type": [
              "string",
              "null"
            ]
          },
          "ativo": {
            "type": "boolean"
          },
          "atividades": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Quantas atividades (ocorrências) apontam para o item."
          }
        },
        "required": [
          "id",
          "disciplinaId",
          "nome",
          "descricao",
          "ativo",
          "atividades"
        ],
        "additionalProperties": false
      },
      "AtividadeProfissionalMesclar": {
        "type": "object",
        "properties": {
          "destinoId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "destinoId"
        ],
        "additionalProperties": false
      },
      "AtividadesProfissionais": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AtividadeProfissionalDto"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "AuditoriaEstatisticas": {
        "type": "object",
        "properties": {
          "de": {
            "$ref": "#/components/schemas/Data"
          },
          "ate": {
            "$ref": "#/components/schemas/Data"
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "porAcao": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "acao": {
                  "type": "string"
                },
                "total": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "acao",
                "total"
              ],
              "additionalProperties": false
            }
          },
          "porDia": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "dia": {
                  "$ref": "#/components/schemas/Data"
                },
                "total": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "dia",
                "total"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "de",
          "ate",
          "total",
          "porAcao",
          "porDia"
        ],
        "additionalProperties": false
      },
      "AuditoriaItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "criadoEm": {
            "type": "string"
          },
          "acao": {
            "type": "string"
          },
          "entidade": {
            "type": "string"
          },
          "entidadeId": {
            "type": [
              "string",
              "null"
            ]
          },
          "instituicaoId": {
            "type": [
              "string",
              "null"
            ]
          },
          "instituicaoSigla": {
            "type": [
              "string",
              "null"
            ]
          },
          "ator": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "nome": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "nome"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "Quem fez: só o id e o nome de exibição. Nulo = o próprio sistema ou uma conta já excluída (contas anonimizadas aparecem como “Pessoa removida”)."
          },
          "dados": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                },
                {
                  "type": "array",
                  "items": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                }
              ]
            },
            "description": "Detalhes do evento, já filtrados: campos que poderiam conter texto livre são omitidos."
          },
          "omitidos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Quantos campos dos detalhes foram omitidos por poderem conter texto livre."
          }
        },
        "required": [
          "id",
          "criadoEm",
          "acao",
          "entidade",
          "entidadeId",
          "instituicaoId",
          "instituicaoSigla",
          "ator",
          "dados",
          "omitidos"
        ],
        "additionalProperties": false
      },
      "AuditoriaPagina": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AuditoriaItem"
            }
          },
          "proximo": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "proximo"
        ],
        "additionalProperties": false
      },
      "AutoavaliacaoDoAluno": {
        "type": "object",
        "properties": {
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "janela": {
            "$ref": "#/components/schemas/JanelaFeedback"
          },
          "podeEscrever": {
            "type": "boolean"
          },
          "criterios": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CriterioDto"
            }
          },
          "minha": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AutoavaliacaoDto"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "turma",
          "janela",
          "podeEscrever",
          "criterios",
          "minha"
        ],
        "additionalProperties": false
      },
      "AutoavaliacaoDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "comentario": {
            "type": "string"
          },
          "notas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "criterioId": {
                  "type": "string",
                  "format": "uuid"
                },
                "valor": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "criterioId",
                "valor"
              ],
              "additionalProperties": false
            }
          },
          "criadoEm": {
            "type": "string"
          },
          "atualizadoEm": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "matriculaId",
          "comentario",
          "notas",
          "criadoEm",
          "atualizadoEm"
        ],
        "additionalProperties": false
      },
      "AutoavaliacaoEscrever": {
        "type": "object",
        "properties": {
          "notas": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "criterioId": {
                  "type": "string",
                  "format": "uuid"
                },
                "valor": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "criterioId",
                "valor"
              ],
              "additionalProperties": false
            }
          },
          "comentario": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4000
          }
        },
        "required": [
          "notas",
          "comentario"
        ],
        "additionalProperties": false
      },
      "AvaliacaoMatricula": {
        "type": "object",
        "properties": {
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "aluno": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "liberada": {
            "type": "boolean"
          },
          "notasVisiveisEm": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          },
          "criterios": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "notaMin": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "notaMax": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "ativo": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "nome",
                "notaMin",
                "notaMax",
                "ativo"
              ],
              "additionalProperties": false
            }
          },
          "presencas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "presencaId": {
                  "type": "string",
                  "format": "uuid"
                },
                "atividade": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Data"
                    },
                    "descricao": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "data",
                    "descricao"
                  ],
                  "additionalProperties": false
                },
                "notas": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "criterioId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "valor": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "rotulo": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "criterioId",
                      "valor",
                      "rotulo"
                    ],
                    "additionalProperties": false
                  }
                },
                "nivelSupervisao": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/NivelSupervisao"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "presencaId",
                "atividade",
                "notas"
              ],
              "additionalProperties": false
            }
          },
          "avaliacaoFinal": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "texto": {
                    "type": "string"
                  },
                  "em": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "por": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "nome": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "nome"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "texto",
                  "em"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "matriculaId",
          "turma",
          "aluno",
          "liberada",
          "notasVisiveisEm",
          "criterios",
          "presencas",
          "avaliacaoFinal"
        ],
        "additionalProperties": false
      },
      "AvaliarPresenca": {
        "type": "object",
        "properties": {
          "estado": {
            "type": "string",
            "enum": [
              "CONFIRMADA",
              "REJEITADA"
            ]
          },
          "comentario": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "notas": {
            "maxItems": 20,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Nota"
            }
          },
          "nivelSupervisao": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NivelSupervisao"
              },
              {
                "type": "null"
              }
            ],
            "description": "Ausente = mantém o que havia; nulo = limpa; só vale ao confirmar."
          }
        },
        "required": [
          "estado"
        ],
        "additionalProperties": false
      },
      "Cockpit": {
        "type": "object",
        "properties": {
          "aluno": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CockpitAluno"
              },
              {
                "type": "null"
              }
            ]
          },
          "avaliador": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CockpitAvaliador"
              },
              {
                "type": "null"
              }
            ]
          },
          "gestao": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CockpitGestao"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "aluno",
          "avaliador",
          "gestao"
        ],
        "additionalProperties": false
      },
      "CockpitAluno": {
        "type": "object",
        "properties": {
          "instituicoes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "sigla": {
                  "type": "string"
                },
                "nome": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "sigla",
                "nome"
              ],
              "additionalProperties": false
            },
            "description": "Instituições onde a pessoa tem matrícula (ativa ou no histórico): sempre todas, mesmo com o filtro `instituicaoId`. Pode faltar em servidores mais antigos."
          },
          "proximas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "data": {
                  "$ref": "#/components/schemas/Data"
                },
                "horaInicio": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Hora"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "horaFim": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Hora"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "descricao": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "turma": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "disciplina": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "sigla": {
                      "type": "string"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "sigla",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "estado": {
                  "type": "string",
                  "enum": [
                    "NAO_SOLICITADA",
                    "SOLICITADA",
                    "CONFIRMADA",
                    "REJEITADA"
                  ]
                },
                "obrigatoria": {
                  "type": "boolean"
                },
                "janela": {
                  "type": "object",
                  "properties": {
                    "abre": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "fecha": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "fase": {
                      "type": "string",
                      "enum": [
                        "antes",
                        "aberta",
                        "encerrada"
                      ]
                    },
                    "fuso": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "abre",
                    "fecha",
                    "fase"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "id",
                "data",
                "horaInicio",
                "horaFim",
                "descricao",
                "turma",
                "disciplina",
                "estado"
              ],
              "additionalProperties": false
            },
            "description": "Próximas atividades (de hoje em diante, no fuso da instituição), com a situação do pedido de presença."
          },
          "semPedido": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Atividades dos últimos 30 dias que já passaram e ainda não têm pedido de presença."
          },
          "rejeitadas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Pedidos rejeitados nos últimos 60 dias: a pessoa pode refazê-los."
          },
          "frequencia": {
            "type": "object",
            "properties": {
              "confirmadas": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "realizadas": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "percentual": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "confirmadas",
              "realizadas",
              "percentual"
            ],
            "additionalProperties": false,
            "description": "`confirmadas` e `realizadas` contam todas as atividades (o “X de N” do início); `percentual` considera só as obrigatórias."
          },
          "turmas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "turma": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "disciplina": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "sigla": {
                      "type": "string"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "sigla",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "liberada": {
                  "type": "boolean"
                },
                "feedbackFinalLiberado": {
                  "type": "boolean"
                },
                "autoavaliacaoAberta": {
                  "type": "boolean"
                },
                "autoavaliacaoEnviada": {
                  "type": "boolean"
                },
                "criterios": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "criterioId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "nome": {
                        "type": "string"
                      },
                      "notaMin": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "notaMax": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "media": {
                        "type": "number"
                      },
                      "quantidade": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "criterioId",
                      "nome",
                      "notaMin",
                      "notaMax",
                      "media",
                      "quantidade"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "turma",
                "disciplina",
                "liberada",
                "feedbackFinalLiberado",
                "autoavaliacaoAberta",
                "autoavaliacaoEnviada",
                "criterios"
              ],
              "additionalProperties": false
            },
            "description": "Notas por turma. Só trazem valores depois que a turma libera; antes, `liberada` é falso e `criterios` vem vazio."
          }
        },
        "required": [
          "proximas",
          "semPedido",
          "rejeitadas",
          "frequencia",
          "turmas"
        ],
        "additionalProperties": false
      },
      "CockpitAvaliador": {
        "type": "object",
        "properties": {
          "pendentes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "comExcecao": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Pendentes fora da janela ou da cerca (fila de exceções)."
          },
          "atividadesHoje": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Atividades de hoje nas turmas que a pessoa avalia."
          },
          "turmas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "turma": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "disciplina": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "sigla": {
                      "type": "string"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "sigla",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "pendentes": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "comExcecao": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "turma",
                "disciplina",
                "pendentes",
                "comExcecao"
              ],
              "additionalProperties": false
            },
            "description": "Turmas com pedido esperando, da mais cheia para a mais vazia (até 10)."
          },
          "feedbackFinal": {
            "type": "object",
            "properties": {
              "pendentes": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "turmas": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "turma": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "nome": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "nome"
                      ],
                      "additionalProperties": false
                    },
                    "disciplina": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "sigla": {
                          "type": "string"
                        },
                        "nome": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "sigla",
                        "nome"
                      ],
                      "additionalProperties": false
                    },
                    "ate": {
                      "$ref": "#/components/schemas/Data"
                    },
                    "pendentes": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "turma",
                    "disciplina",
                    "ate",
                    "pendentes"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "pendentes",
              "turmas"
            ],
            "additionalProperties": false,
            "description": "Feedback final por escrever: nas turmas que a pessoa avalia e cujo prazo está aberto, alunos (menos ela mesma) sem feedback dela. As mais urgentes (prazo mais próximo) primeiro, até 10 turmas."
          }
        },
        "required": [
          "pendentes",
          "comExcecao",
          "atividadesHoje",
          "turmas",
          "feedbackFinal"
        ],
        "additionalProperties": false
      },
      "CockpitGestao": {
        "type": "object",
        "properties": {
          "instituicoes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "disciplinas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "turmas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "alunos": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "semCriterios": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "sigla": {
                  "type": "string"
                },
                "nome": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "sigla",
                "nome"
              ],
              "additionalProperties": false
            },
            "description": "Disciplinas ativas sem nenhum critério ativo: ninguém consegue dar nota nelas (até 5; o total está em `semCriteriosTotal`)."
          },
          "semCriteriosTotal": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "pendencias": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "tipo": {
                  "type": "string",
                  "enum": [
                    "SEM_CENTRO",
                    "SEM_ATIVIDADE",
                    "SEM_ALUNOS",
                    "CONVITE_PENDENTE"
                  ]
                },
                "total": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "turmas": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "turma": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "nome": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "nome"
                        ],
                        "additionalProperties": false
                      },
                      "disciplina": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "sigla": {
                            "type": "string"
                          },
                          "nome": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "sigla",
                          "nome"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "turma",
                      "disciplina"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "tipo",
                "total",
                "turmas"
              ],
              "additionalProperties": false
            },
            "description": "Turmas ativas ainda não prontas para receber presença, por motivo: sem centro (a cerca não tem referência), sem atividade de hoje em diante, sem aluno, ou com aluno que ainda não aceitou o convite. Até 5 turmas por motivo; o total vem em `total`. Só turmas e contagens, nenhum nome de pessoa."
          },
          "listaTurmas": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "itens": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    },
                    "disciplina": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "sigla": {
                          "type": "string"
                        },
                        "nome": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "sigla",
                        "nome"
                      ],
                      "additionalProperties": false
                    },
                    "atividadesHoje": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "pendencias": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "SEM_CENTRO",
                          "SEM_ATIVIDADE",
                          "SEM_ALUNOS",
                          "CONVITE_PENDENTE"
                        ]
                      }
                    },
                    "semCriterio": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "nome",
                    "disciplina",
                    "atividadesHoje",
                    "pendencias",
                    "semCriterio"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "itens"
            ],
            "additionalProperties": false,
            "description": "Situação de cada turma ativa do escopo (as mesmas contadas em `turmas`), por sigla da disciplina e nome da turma, até 50 (o total vem em `total`): quantas atividades hoje e quais pendências tem, com as mesmas regras de `pendencias`. `semCriterio`: a disciplina não tem critério ativo (bloqueia a avaliação). Só ids, siglas e contagens. Pode faltar em servidores mais antigos."
          }
        },
        "required": [
          "instituicoes",
          "disciplinas",
          "turmas",
          "alunos",
          "semCriterios",
          "semCriteriosTotal",
          "pendencias"
        ],
        "additionalProperties": false
      },
      "ConfirmarLote": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        },
        "required": [
          "ids"
        ],
        "additionalProperties": false
      },
      "ConfirmarLoteResultado": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PresencaDto"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "ContadorNotificacoes": {
        "type": "object",
        "properties": {
          "naoLidas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "naoLidas"
        ],
        "additionalProperties": false
      },
      "ContatoSite": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "maxLength": 120
          },
          "email": {
            "$ref": "#/components/schemas/Email"
          },
          "telefone": {
            "type": "string",
            "maxLength": 30
          },
          "mensagem": {
            "type": "string",
            "minLength": 20,
            "maxLength": 2000
          },
          "site": {
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "email",
          "mensagem"
        ]
      },
      "ConversaPagina": {
        "type": "object",
        "properties": {
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              },
              "disciplinaNome": {
                "type": "string"
              },
              "ativa": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "nome",
              "disciplinaNome",
              "ativa"
            ],
            "additionalProperties": false
          },
          "itens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MensagemDto"
            },
            "description": "Da mais antiga para a mais nova."
          },
          "anteriores": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor para buscar as anteriores; nulo = chegou ao começo."
          },
          "podeEscrever": {
            "type": "boolean"
          },
          "podeModerar": {
            "type": "boolean"
          },
          "alteradas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MensagemDto"
            },
            "description": "Mensagens editadas ou removidas desde `alteradasDesde` (para consulta periódica): o cliente troca as que já tem."
          },
          "agora": {
            "type": "string",
            "description": "Relógio do servidor no momento da leitura (use no próximo `alteradasDesde`)."
          }
        },
        "required": [
          "turma",
          "itens",
          "anteriores",
          "podeEscrever",
          "podeModerar",
          "alteradas",
          "agora"
        ],
        "additionalProperties": false
      },
      "CriterioAtualizar": {
        "type": "object",
        "properties": {
          "nomes": {
            "type": "object",
            "properties": {
              "pt-BR": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "es": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "en-US": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            },
            "additionalProperties": false
          },
          "descricoes": {
            "$ref": "#/components/schemas/CriterioDescricoes"
          },
          "rubricas": {
            "$ref": "#/components/schemas/CriterioRubricas"
          },
          "ordem": {
            "type": "integer",
            "minimum": 0,
            "maximum": 999
          },
          "ativo": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CriterioCriar": {
        "type": "object",
        "properties": {
          "chave": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{1,39}$"
          },
          "notaMin": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99
          },
          "notaMax": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "permiteNa": {
            "default": false,
            "type": "boolean"
          },
          "ordem": {
            "type": "integer",
            "minimum": 0,
            "maximum": 999
          },
          "nomes": {
            "$ref": "#/components/schemas/CriterioNomes"
          },
          "descricoes": {
            "$ref": "#/components/schemas/CriterioDescricoes"
          },
          "rubricas": {
            "$ref": "#/components/schemas/CriterioRubricas"
          }
        },
        "required": [
          "chave",
          "notaMin",
          "notaMax",
          "nomes"
        ],
        "additionalProperties": false
      },
      "CriterioDescricoes": {
        "type": "object",
        "properties": {
          "pt-BR": {
            "type": "string",
            "maxLength": 300
          },
          "es": {
            "type": "string",
            "maxLength": 300
          },
          "en-US": {
            "type": "string",
            "maxLength": 300
          }
        },
        "additionalProperties": false
      },
      "CriterioDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "disciplinaId": {
            "type": "string",
            "format": "uuid"
          },
          "chave": {
            "type": "string"
          },
          "notaMin": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "notaMax": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "permiteNa": {
            "type": "boolean"
          },
          "ordem": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "ativo": {
            "type": "boolean"
          },
          "nome": {
            "type": "string",
            "description": "Nome no idioma de quem pediu (cai no português e depois em qualquer idioma)."
          },
          "nomes": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "enum": [
                "pt-BR",
                "es",
                "en-US"
              ]
            },
            "additionalProperties": {
              "type": "string"
            },
            "description": "Todos os nomes cadastrados, por idioma (para editar)."
          },
          "descricao": {
            "type": "string",
            "description": "Descrição de como avaliar no idioma de quem pediu (cai no português; vazia se não houver)."
          },
          "descricoes": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "enum": [
                "pt-BR",
                "es",
                "en-US"
              ]
            },
            "additionalProperties": {
              "type": "string"
            },
            "description": "Todas as descrições cadastradas, por idioma (para editar)."
          },
          "rubrica": {
            "$ref": "#/components/schemas/Rubrica",
            "description": "Rubrica no idioma de quem pediu (cai no português; vazia se não houver)."
          },
          "rubricas": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "enum": [
                "pt-BR",
                "es",
                "en-US"
              ]
            },
            "additionalProperties": {
              "$ref": "#/components/schemas/Rubrica"
            },
            "description": "Todas as rubricas cadastradas, por idioma (para editar)."
          }
        },
        "required": [
          "id",
          "disciplinaId",
          "chave",
          "notaMin",
          "notaMax",
          "permiteNa",
          "ordem",
          "ativo",
          "nome",
          "nomes",
          "descricao",
          "descricoes",
          "rubrica",
          "rubricas"
        ],
        "additionalProperties": false
      },
      "CriterioNomes": {
        "type": "object",
        "properties": {
          "pt-BR": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "es": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "en-US": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          }
        },
        "required": [
          "pt-BR"
        ],
        "additionalProperties": false
      },
      "CriterioRubricas": {
        "type": "object",
        "properties": {
          "pt-BR": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Rubrica"
              },
              {
                "type": "null"
              }
            ]
          },
          "es": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Rubrica"
              },
              {
                "type": "null"
              }
            ]
          },
          "en-US": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Rubrica"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "Criterios": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CriterioDto"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "Data": {
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      },
      "DisciplinaAtualizar": {
        "type": "object",
        "properties": {
          "sigla": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,14}$"
          },
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "ementa": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10000
              },
              {
                "type": "null"
              }
            ]
          },
          "semanas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 520
              },
              {
                "type": "null"
              }
            ]
          },
          "ativo": {
            "type": "boolean"
          }
        }
      },
      "DisciplinaCriar": {
        "type": "object",
        "properties": {
          "sigla": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,14}$"
          },
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "ementa": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10000
              },
              {
                "type": "null"
              }
            ]
          },
          "semanas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 520
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "sigla",
          "nome"
        ]
      },
      "DisciplinaDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "instituicaoId": {
            "type": "string",
            "format": "uuid"
          },
          "sigla": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "ementa": {
            "type": [
              "string",
              "null"
            ]
          },
          "semanas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "ativo": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "instituicaoId",
          "sigla",
          "nome",
          "ementa",
          "semanas",
          "ativo"
        ],
        "additionalProperties": false
      },
      "DispositivoRegistrar": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "minLength": 8,
            "maxLength": 4096,
            "pattern": "^[\\x21-\\x7E]+$"
          },
          "plataforma": {
            "type": "string",
            "enum": [
              "IOS",
              "ANDROID",
              "WEB"
            ]
          }
        },
        "required": [
          "token",
          "plataforma"
        ]
      },
      "DispositivoRemover": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "minLength": 8,
            "maxLength": 4096,
            "pattern": "^[\\x21-\\x7E]+$"
          }
        },
        "required": [
          "token"
        ]
      },
      "Email": {
        "type": "string",
        "maxLength": 254,
        "pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"
      },
      "EncerrarOutrasResultado": {
        "type": "object",
        "properties": {
          "encerradas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "encerradas"
        ],
        "additionalProperties": false
      },
      "EquipeCriar": {
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/Email"
          },
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "nationality": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "pattern": "^[A-Za-z]{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "papel": {
            "type": "string",
            "enum": [
              "CURADOR",
              "PRECEPTOR",
              "COORDENADOR",
              "PROFESSOR",
              "AUXILIAR"
            ]
          },
          "disciplinaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "turmaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "podeAvaliar": {
            "default": false,
            "type": "boolean"
          },
          "podeCadastrar": {
            "default": false,
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "nome",
          "papel"
        ]
      },
      "ErroApi": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "VALIDATION_FAILED",
              "UNAUTHENTICATED",
              "FORBIDDEN",
              "NOT_FOUND",
              "METHOD_NOT_ALLOWED",
              "CONFLICT",
              "PAYLOAD_TOO_LARGE",
              "UNPROCESSABLE",
              "RATE_LIMITED",
              "TOKEN_INVALID",
              "EXCEPTION_REQUIRED",
              "ACTIVITY_CANCELLED",
              "ALREADY_CONFIRMED",
              "NOT_PENDING",
              "EXCEPTION_REVIEW_REQUIRED",
              "BATCH_REJECTED",
              "FEEDBACK_CLOSED",
              "LAST_ADMIN",
              "LAST_CURATOR",
              "INTERNAL"
            ]
          },
          "fields": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "enum": [
                "required",
                "invalid",
                "too_short",
                "too_long",
                "out_of_range",
                "taken",
                "weak",
                "reused",
                "too_soon",
                "wrong_password",
                "locked"
              ]
            }
          },
          "excecoes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "falhas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "VALIDATION_FAILED",
                    "UNAUTHENTICATED",
                    "FORBIDDEN",
                    "NOT_FOUND",
                    "METHOD_NOT_ALLOWED",
                    "CONFLICT",
                    "PAYLOAD_TOO_LARGE",
                    "UNPROCESSABLE",
                    "RATE_LIMITED",
                    "TOKEN_INVALID",
                    "EXCEPTION_REQUIRED",
                    "ACTIVITY_CANCELLED",
                    "ALREADY_CONFIRMED",
                    "NOT_PENDING",
                    "EXCEPTION_REVIEW_REQUIRED",
                    "BATCH_REJECTED",
                    "FEEDBACK_CLOSED",
                    "LAST_ADMIN",
                    "LAST_CURATOR",
                    "INTERNAL"
                  ]
                }
              },
              "required": [
                "id",
                "code"
              ]
            }
          },
          "retryAfterSeg": {
            "type": "integer",
            "minimum": 0
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "code"
        ]
      },
      "EsqueciSenhaInput": {
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/Email"
          }
        },
        "required": [
          "email"
        ]
      },
      "EstatisticaAluno": {
        "type": "object",
        "properties": {
          "alunoId": {
            "type": "string",
            "format": "uuid"
          },
          "nome": {
            "type": "string"
          },
          "proprio": {
            "type": "boolean",
            "description": "É a própria pessoa que pediu."
          },
          "confirmadas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "pendentes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "rejeitadas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "naoSolicitadas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "obrigatorias": {
            "type": "object",
            "properties": {
              "confirmadas": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "confirmadas",
              "total"
            ],
            "additionalProperties": false,
            "description": "Confirmadas e realizadas só entre as atividades obrigatórias: a base do `percentual`."
          },
          "percentual": {
            "type": [
              "number",
              "null"
            ],
            "description": "Obrigatórias confirmadas ÷ obrigatórias realizadas, de 0 a 100 com 1 casa decimal; nulo se ainda não houve atividade obrigatória realizada. Atividade opcional não entra."
          },
          "medias": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaCriterio"
            },
            "description": "Média por critério (presenças confirmadas na janela, sem “não se aplica”). Ausente na linha da própria pessoa enquanto a turma não libera as notas. Critério sem nota não aparece."
          }
        },
        "required": [
          "alunoId",
          "nome",
          "proprio",
          "confirmadas",
          "pendentes",
          "rejeitadas",
          "naoSolicitadas",
          "obrigatorias",
          "percentual"
        ],
        "additionalProperties": false
      },
      "Estatisticas": {
        "type": "object",
        "properties": {
          "turmas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EstatisticaTurma"
            }
          }
        },
        "required": [
          "turmas"
        ],
        "additionalProperties": false
      },
      "EstatisticaTurma": {
        "type": "object",
        "properties": {
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              },
              "ativo": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "nome",
              "ativo"
            ],
            "additionalProperties": false
          },
          "disciplina": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "instituicao": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "atividades": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Atividades não canceladas que já aconteceram na janela."
          },
          "alunos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EstatisticaAluno"
            },
            "description": "Quem avalia a turma vê todos os alunos; quem só é aluno vê só a si."
          },
          "criterios": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "notaMin": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "notaMax": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "nome",
                "notaMin",
                "notaMax"
              ],
              "additionalProperties": false
            },
            "description": "Critérios que aparecem nas médias (ativos ou com nota), na ordem da disciplina e no idioma da pessoa."
          },
          "notasLiberadas": {
            "type": "boolean",
            "description": "A turma já liberou as notas ao aluno."
          },
          "mediasTurma": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaCriterio"
            },
            "description": "Média da turma por critério: só para quem avalia a turma; nunca ao aluno."
          },
          "podeAvaliar": {
            "type": "boolean",
            "description": "Quem pediu avalia a turma (pode exportar)."
          }
        },
        "required": [
          "turma",
          "disciplina",
          "instituicao",
          "atividades",
          "alunos"
        ],
        "additionalProperties": false
      },
      "EvolucaoAluno": {
        "type": "object",
        "properties": {
          "aluno": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "disciplinas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvolucaoDisciplina"
            }
          },
          "turmasNaoLiberadas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Só na visão do próprio aluno: turmas dele cujas notas ainda não foram liberadas (não entram nas séries)."
          }
        },
        "required": [
          "aluno",
          "disciplinas",
          "turmasNaoLiberadas"
        ],
        "additionalProperties": false
      },
      "EvolucaoAlunoItem": {
        "type": "object",
        "properties": {
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "nome": {
            "type": "string"
          },
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "disciplina": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "matriculaId",
          "nome",
          "turma",
          "disciplina"
        ],
        "additionalProperties": false
      },
      "EvolucaoAlunos": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvolucaoAlunoItem"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "EvolucaoDisciplina": {
        "type": "object",
        "properties": {
          "disciplina": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "instituicao": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false,
            "description": "Instituição da disciplina: com conta única em várias instituições, a tela filtra por ela. Pode faltar em servidores mais antigos."
          },
          "turmas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "matriculaId": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "dataInicio": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Data"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "dataFim": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Data"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "matriculaId",
                "nome",
                "dataInicio",
                "dataFim"
              ],
              "additionalProperties": false
            }
          },
          "presencasAvaliadas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "avaliadores": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "criterios": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "notaMin": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "notaMax": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "pontos": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "atividadeId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "turmaId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "data": {
                        "$ref": "#/components/schemas/Data"
                      },
                      "valor": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "atividadeId",
                      "turmaId",
                      "data",
                      "valor"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "nome",
                "notaMin",
                "notaMax",
                "pontos"
              ],
              "additionalProperties": false
            }
          },
          "atividadesProfissionais": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "pontos": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "atividadeId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "turmaId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "data": {
                        "$ref": "#/components/schemas/Data"
                      },
                      "nivel": {
                        "$ref": "#/components/schemas/NivelSupervisao"
                      }
                    },
                    "required": [
                      "atividadeId",
                      "turmaId",
                      "data",
                      "nivel"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "nome",
                "pontos"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "disciplina",
          "turmas",
          "presencasAvaliadas",
          "avaliadores",
          "criterios",
          "atividadesProfissionais"
        ],
        "additionalProperties": false
      },
      "ExcluirContaConfirmarInput": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "minLength": 20,
            "maxLength": 200
          }
        },
        "required": [
          "token"
        ]
      },
      "ExcluirContaInput": {
        "type": "object",
        "properties": {
          "senha": {
            "$ref": "#/components/schemas/Senha"
          }
        },
        "required": [
          "senha"
        ]
      },
      "ExcluirContaSolicitarInput": {
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/Email"
          }
        },
        "required": [
          "email"
        ]
      },
      "FeedbackFinalDoAluno": {
        "type": "object",
        "properties": {
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "liberado": {
            "type": "boolean"
          },
          "liberaEm": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          },
          "criterios": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CriterioDto"
            }
          },
          "feedbacks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeedbackFinalDto"
            }
          }
        },
        "required": [
          "turma",
          "liberado",
          "liberaEm",
          "criterios",
          "feedbacks"
        ],
        "additionalProperties": false
      },
      "FeedbackFinalDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "autor": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "nome": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "nome"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "Nulo quando o autor excluiu a conta."
          },
          "comentario": {
            "type": "string"
          },
          "comentarioInterno": {
            "type": [
              "string",
              "null"
            ]
          },
          "notas": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "criterioId": {
                  "type": "string",
                  "format": "uuid"
                },
                "valor": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "criterioId",
                "valor"
              ],
              "additionalProperties": false
            }
          },
          "criadoEm": {
            "type": "string"
          },
          "atualizadoEm": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "matriculaId",
          "autor",
          "comentario",
          "notas",
          "criadoEm",
          "atualizadoEm"
        ],
        "additionalProperties": false
      },
      "FeedbackFinalEscrever": {
        "type": "object",
        "properties": {
          "notas": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "criterioId": {
                  "type": "string",
                  "format": "uuid"
                },
                "valor": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "criterioId",
                "valor"
              ],
              "additionalProperties": false
            }
          },
          "comentario": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4000
          },
          "comentarioInterno": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "notas",
          "comentario"
        ],
        "additionalProperties": false
      },
      "FeedbackFinalMatricula": {
        "type": "object",
        "properties": {
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              },
              "dataInicio": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Data"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "dataFim": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Data"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "nome",
              "dataInicio",
              "dataFim"
            ],
            "additionalProperties": false
          },
          "aluno": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "janela": {
            "$ref": "#/components/schemas/JanelaFeedback"
          },
          "criterios": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CriterioDto"
            }
          },
          "meu": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FeedbackFinalDto"
              },
              {
                "type": "null"
              }
            ]
          },
          "podeEscrever": {
            "type": "boolean"
          },
          "verTudo": {
            "type": "boolean"
          },
          "equipe": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeedbackFinalDto"
            }
          },
          "autoavaliacao": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AutoavaliacaoDto"
              },
              {
                "type": "null"
              }
            ],
            "description": "Autoavaliação do aluno. Só para quem `verTudo`; nulo para os demais e quando o aluno não escreveu."
          }
        },
        "required": [
          "matriculaId",
          "turma",
          "aluno",
          "janela",
          "criterios",
          "meu",
          "podeEscrever",
          "verTudo",
          "equipe"
        ],
        "additionalProperties": false
      },
      "FeedbackFinalTurma": {
        "type": "object",
        "properties": {
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              },
              "dataInicio": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Data"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "dataFim": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Data"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "nome",
              "dataInicio",
              "dataFim"
            ],
            "additionalProperties": false
          },
          "janela": {
            "$ref": "#/components/schemas/JanelaFeedback"
          },
          "podeEscrever": {
            "type": "boolean"
          },
          "verTudo": {
            "type": "boolean"
          },
          "itens": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "matriculaId": {
                  "type": "string",
                  "format": "uuid"
                },
                "aluno": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "meuEm": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "matriculaId",
                "aluno",
                "meuEm",
                "total"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "turma",
          "janela",
          "podeEscrever",
          "verTudo",
          "itens"
        ],
        "additionalProperties": false
      },
      "FilaAvaliacao": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FilaAvaliacaoItem"
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "items",
          "total"
        ],
        "additionalProperties": false
      },
      "FilaAvaliacaoItem": {
        "type": "object",
        "properties": {
          "atividade": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "descricao": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "data": {
                "$ref": "#/components/schemas/Data"
              },
              "horaInicio": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Hora"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "horaFim": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/Hora"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "obrigatoria": {
                "type": "boolean"
              },
              "turma": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "nome": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "nome"
                ],
                "additionalProperties": false
              },
              "disciplina": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "sigla": {
                    "type": "string"
                  },
                  "nome": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "sigla",
                  "nome"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "descricao",
              "data",
              "horaInicio",
              "horaFim",
              "obrigatoria",
              "turma",
              "disciplina"
            ],
            "additionalProperties": false
          },
          "linha": {
            "$ref": "#/components/schemas/PresencaLinha"
          },
          "elegivelLote": {
            "type": "boolean",
            "description": "Entra na confirmação em lote: pendente e sem exceção (regra calculada no servidor)."
          }
        },
        "required": [
          "atividade",
          "linha",
          "elegivelLote"
        ],
        "additionalProperties": false
      },
      "FrequenciaTurma": {
        "type": "object",
        "properties": {
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "hoje": {
            "$ref": "#/components/schemas/Data",
            "description": "Data de hoje no fuso da instituição (para destacar a coluna “hoje”)."
          },
          "de": {
            "$ref": "#/components/schemas/Data"
          },
          "ate": {
            "$ref": "#/components/schemas/Data"
          },
          "atividades": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "data": {
                  "$ref": "#/components/schemas/Data"
                },
                "horaInicio": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "horaFim": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "descricao": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "obrigatoria": {
                  "type": "boolean"
                },
                "cancelada": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "data",
                "horaInicio",
                "horaFim",
                "descricao",
                "obrigatoria",
                "cancelada"
              ],
              "additionalProperties": false
            },
            "description": "Atividades na janela, por data e hora de início."
          },
          "alunos": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "matriculaId": {
                  "type": "string",
                  "format": "uuid"
                },
                "nome": {
                  "type": "string"
                },
                "celulas": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "atividadeId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "estado": {
                        "type": "string",
                        "enum": [
                          "NAO_SOLICITADA",
                          "SOLICITADA",
                          "CONFIRMADA",
                          "REJEITADA"
                        ]
                      }
                    },
                    "required": [
                      "atividadeId",
                      "estado"
                    ],
                    "additionalProperties": false
                  }
                },
                "obrigatorias": {
                  "type": "object",
                  "properties": {
                    "confirmadas": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "total": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "confirmadas",
                    "total"
                  ],
                  "additionalProperties": false
                },
                "opcionais": {
                  "type": "object",
                  "properties": {
                    "confirmadas": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "total": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "confirmadas",
                    "total"
                  ],
                  "additionalProperties": false
                },
                "percentual": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "matriculaId",
                "nome",
                "celulas",
                "obrigatorias",
                "opcionais",
                "percentual"
              ],
              "additionalProperties": false
            },
            "description": "Alunos com matrícula ativa, em ordem alfabética."
          },
          "truncado": {
            "type": "object",
            "properties": {
              "atividades": {
                "type": "boolean"
              },
              "alunos": {
                "type": "boolean"
              }
            },
            "required": [
              "atividades",
              "alunos"
            ],
            "additionalProperties": false,
            "description": "A lista foi cortada no limite máximo de alunos e atividades; a grade e os totais valem só para o que veio."
          }
        },
        "required": [
          "turma",
          "hoje",
          "de",
          "ate",
          "atividades",
          "alunos",
          "truncado"
        ],
        "additionalProperties": false
      },
      "Fuso": {
        "type": "string",
        "minLength": 1,
        "maxLength": 64
      },
      "Health": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ok",
              "degraded"
            ]
          },
          "db": {
            "type": "string",
            "enum": [
              "up",
              "down"
            ]
          },
          "version": {
            "type": "string"
          },
          "locale": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "db",
          "version",
          "locale"
        ],
        "additionalProperties": false
      },
      "Hora": {
        "type": "string",
        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d(:[0-5]\\d)?$",
        "description": "HH:MM ou HH:MM:SS; a resposta traz sempre HH:MM:SS."
      },
      "ImportacaoEntrada": {
        "type": "object",
        "properties": {
          "csv": {
            "type": "string",
            "minLength": 1,
            "maxLength": 90000
          },
          "modo": {
            "type": "string",
            "enum": [
              "simular",
              "aplicar"
            ],
            "description": "`simular` só valida e mostra o que aconteceria; `aplicar` grava tudo ou nada (a menos que `parcial`)."
          },
          "parcial": {
            "type": "boolean",
            "description": "Modo parcial (com travas): importa só as linhas válidas e devolve as ignoradas na resposta. `simular` com `parcial` devolve `hashConteudo`; `aplicar` com `parcial` exige o mesmo `hashConteudo` (ausente ou diferente = 409 `CONFLICT`). Ausente ou `false` = tudo ou nada."
          },
          "hashConteudo": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$",
            "description": "Hash devolvido pela simulação parcial do mesmo conteúdo (SHA-256 do conteúdo normalizado, 64 caracteres hexadecimais)."
          }
        },
        "required": [
          "csv",
          "modo"
        ]
      },
      "ImportacaoRelatorio": {
        "type": "object",
        "properties": {
          "tipo": {
            "type": "string",
            "enum": [
              "pessoas",
              "alunos",
              "atividades"
            ]
          },
          "modo": {
            "type": "string",
            "enum": [
              "simular",
              "aplicar"
            ]
          },
          "aplicado": {
            "type": "boolean",
            "description": "No `aplicar`: `true` = gravou; `false` = alguma linha com erro, nada foi gravado. No `simular`, sempre `false`."
          },
          "erroArquivo": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "empty",
                  "too_many_lines",
                  "unterminated_quote",
                  "too_large",
                  "missing_column"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Erro do arquivo como um todo (vazio, grande demais, coluna obrigatória ausente)."
          },
          "colunaAusente": {
            "type": [
              "string",
              "null"
            ]
          },
          "resumo": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "linhas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinhaRelatorio"
            }
          },
          "convites": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Convites que vão sair (contas novas). `null` = não informado (o `simular` não revela se o e-mail já tem conta)."
          },
          "parcial": {
            "type": "boolean",
            "description": "Só no modo parcial. `true` = o pedido foi parcial."
          },
          "hashConteudo": {
            "type": "string",
            "description": "Só no `simular` parcial: SHA-256 do conteúdo normalizado (tipo, destino e linhas lidas), que o `aplicar` parcial devolve."
          },
          "contagens": {
            "type": "object",
            "properties": {
              "importadas": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "ignoradas": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "importadas",
              "ignoradas"
            ],
            "additionalProperties": false,
            "description": "Só no modo parcial: `importadas` = linhas válidas (CRIADA, INCLUIDA, REATIVADA ou JA_EXISTE, detalhadas em `resumo`); `ignoradas` = linhas com ERRO. Importadas + ignoradas = linhas lidas. No `simular`, é a previsão."
          },
          "ignoradas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinhaRelatorio"
            },
            "description": "Só no `aplicar` parcial: as linhas que ficaram de fora (linha, campo e motivo). Existe apenas nesta resposta: não é gravado."
          }
        },
        "required": [
          "tipo",
          "modo",
          "aplicado",
          "erroArquivo",
          "colunaAusente",
          "resumo",
          "linhas",
          "convites"
        ],
        "additionalProperties": false
      },
      "InstituicaoAtualizar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "timezone": {
            "$ref": "#/components/schemas/Fuso"
          },
          "retencaoMeses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 600
              },
              {
                "type": "null"
              }
            ]
          },
          "controladorNome": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "description": "Privacidade (LGPD): `null` apaga o valor e volta ao padrão da plataforma."
          },
          "encarregadoNome": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "contatoPrivacidade": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Email"
              },
              {
                "type": "null"
              }
            ]
          },
          "ativo": {
            "type": "boolean"
          }
        }
      },
      "InstituicaoCriar": {
        "type": "object",
        "properties": {
          "sigla": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{1,19}$"
          },
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "timezone": {
            "default": "America/Sao_Paulo",
            "$ref": "#/components/schemas/Fuso"
          },
          "retencaoMeses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 600
              },
              {
                "type": "null"
              }
            ]
          },
          "curador": {
            "type": "object",
            "properties": {
              "email": {
                "$ref": "#/components/schemas/Email"
              },
              "nome": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              }
            },
            "required": [
              "email",
              "nome"
            ],
            "description": "Primeiro curador da instituição: recebe o convite por e-mail."
          }
        },
        "required": [
          "sigla",
          "nome"
        ]
      },
      "InstituicaoDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "sigla": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "ativo": {
            "type": "boolean"
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "timezone": {
            "type": "string"
          },
          "retencaoMeses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "controladorNome": {
            "type": [
              "string",
              "null"
            ],
            "description": "Dados de privacidade da instituição; a API sempre os envia (nulos quando não informados)."
          },
          "encarregadoNome": {
            "type": [
              "string",
              "null"
            ]
          },
          "contatoPrivacidade": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "sigla",
          "nome",
          "ativo",
          "locale",
          "timezone",
          "retencaoMeses"
        ],
        "additionalProperties": false
      },
      "JanelaFeedback": {
        "type": "object",
        "properties": {
          "estado": {
            "type": "string",
            "enum": [
              "sem_data",
              "nao_abriu",
              "aberta",
              "encerrada"
            ]
          },
          "prazoDias": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "abreEm": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ],
            "description": "Primeiro dia em que se pode escrever (o dia do fim da turma); nulo sem data de fim."
          },
          "ate": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ],
            "description": "Último dia em que se pode escrever ou ajustar; nulo sem data de fim."
          }
        },
        "required": [
          "estado",
          "prazoDias",
          "abreEm",
          "ate"
        ],
        "additionalProperties": false
      },
      "LinhaRelatorio": {
        "type": "object",
        "properties": {
          "linha": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "situacao": {
            "type": "string",
            "enum": [
              "VALIDA",
              "CRIADA",
              "VINCULADA",
              "INCLUIDA",
              "REATIVADA",
              "JA_EXISTE",
              "ERRO"
            ]
          },
          "rotulo": {
            "type": "string",
            "description": "O que identifica a linha para quem importou (o e-mail, ou a data e a descrição que vieram no próprio arquivo)."
          },
          "campo": {
            "type": "string"
          },
          "codigo": {
            "type": "string",
            "enum": [
              "required",
              "invalid",
              "too_long",
              "out_of_range",
              "duplicate",
              "not_found"
            ]
          }
        },
        "required": [
          "linha",
          "situacao",
          "rotulo"
        ],
        "additionalProperties": false
      },
      "LoginInput": {
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/Email"
          },
          "senha": {
            "$ref": "#/components/schemas/Senha"
          }
        },
        "required": [
          "email",
          "senha"
        ]
      },
      "LogoutInput": {
        "type": "object",
        "properties": {
          "refreshToken": {
            "type": "string",
            "minLength": 20,
            "maxLength": 200
          },
          "dispositivoToken": {
            "type": "string",
            "minLength": 8,
            "maxLength": 4096,
            "pattern": "^[\\x21-\\x7E]+$"
          }
        },
        "required": [
          "refreshToken"
        ]
      },
      "MarcarLidas": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "ids": {
                "minItems": 1,
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "required": [
              "ids"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "todas": {
                "type": "boolean",
                "const": true
              }
            },
            "required": [
              "todas"
            ],
            "additionalProperties": false
          }
        ]
      },
      "MatriculaAtualizar": {
        "type": "object",
        "properties": {
          "ativo": {
            "type": "boolean"
          }
        },
        "required": [
          "ativo"
        ]
      },
      "MatriculaCriar": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "usuarioId": {
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "usuarioId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "email": {
                "$ref": "#/components/schemas/Email"
              },
              "nome": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "nationality": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "pattern": "^[A-Za-z]{2}$"
              }
            },
            "required": [
              "email",
              "nome"
            ],
            "additionalProperties": false
          }
        ]
      },
      "MatriculaDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "turmaId": {
            "type": "string",
            "format": "uuid"
          },
          "usuarioId": {
            "type": "string",
            "format": "uuid"
          },
          "ativo": {
            "type": "boolean"
          },
          "nome": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "CONVIDADO",
              "ATIVO",
              "SUSPENSO"
            ]
          },
          "jaExistia": {
            "type": "boolean",
            "description": "Só na resposta de criar por e-mail: o e-mail já tinha conta e a pessoa foi vinculada a ela."
          }
        },
        "required": [
          "id",
          "turmaId",
          "usuarioId",
          "ativo",
          "nome",
          "email",
          "status"
        ],
        "additionalProperties": false
      },
      "Me": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "locale": {
            "type": "string",
            "enum": [
              "pt-BR",
              "es",
              "en-US"
            ]
          },
          "nationality": {
            "type": [
              "string",
              "null"
            ]
          },
          "vinculos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VinculoDto"
            }
          }
        },
        "required": [
          "id",
          "email",
          "nome",
          "locale",
          "nationality",
          "vinculos"
        ],
        "additionalProperties": false
      },
      "MediaCriterio": {
        "type": "object",
        "properties": {
          "criterioId": {
            "type": "string",
            "format": "uuid"
          },
          "media": {
            "type": "number"
          },
          "quantidade": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "criterioId",
          "media",
          "quantidade"
        ],
        "additionalProperties": false
      },
      "MensagemDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "turmaId": {
            "type": "string",
            "format": "uuid"
          },
          "autor": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "nome": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "nome"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "Nulo quando o autor excluiu a conta."
          },
          "texto": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nulo quando a mensagem foi removida (o texto é apagado na remoção)."
          },
          "criadaEm": {
            "type": "string"
          },
          "editadaEm": {
            "type": [
              "string",
              "null"
            ]
          },
          "removida": {
            "type": "boolean"
          },
          "removidaPorModeracao": {
            "type": "boolean",
            "description": "Removida por quem modera (e não pelo autor)."
          },
          "cursor": {
            "type": "string",
            "description": "Cursor desta mensagem (use em `depois` ou `antes`)."
          }
        },
        "required": [
          "id",
          "turmaId",
          "autor",
          "texto",
          "criadaEm",
          "editadaEm",
          "removida",
          "removidaPorModeracao",
          "cursor"
        ],
        "additionalProperties": false
      },
      "MensagemTexto": {
        "type": "object",
        "properties": {
          "texto": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          }
        },
        "required": [
          "texto"
        ]
      },
      "MinhaAtividadeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "data": {
            "$ref": "#/components/schemas/Data"
          },
          "horaInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "descricao": {
            "type": [
              "string",
              "null"
            ]
          },
          "local": {
            "type": [
              "string",
              "null"
            ]
          },
          "obrigatoria": {
            "type": "boolean"
          },
          "cancelada": {
            "type": "boolean"
          },
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "disciplina": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "instituicao": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "estado": {
            "type": "string",
            "enum": [
              "NAO_SOLICITADA",
              "SOLICITADA",
              "CONFIRMADA",
              "REJEITADA"
            ]
          },
          "presencaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "solicitadaEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Quando o pedido foi feito, se houve."
          },
          "avaliadaEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Quando foi confirmada ou rejeitada (nulo enquanto não avaliada). Quem avaliou não vem: o aluno não vê nomes da equipe."
          },
          "comentarioAvaliador": {
            "type": [
              "string",
              "null"
            ],
            "description": "Comentário de quem avaliou. Só vai ao próprio aluno e a quem avalia a turma. Ao aluno: o motivo de uma rejeição sempre; o de uma confirmação só depois que a turma libera as notas."
          },
          "relato": {
            "type": [
              "string",
              "null"
            ],
            "description": "O relato da própria presença (o aluno pode reescrevê-lo). Só nas linhas da própria pessoa."
          },
          "regrasPedido": {
            "type": "object",
            "properties": {
              "janelaInicio": {
                "type": "string"
              },
              "janelaFim": {
                "type": "string"
              },
              "fuso": {
                "type": "string"
              },
              "exigeLocal": {
                "type": "boolean"
              }
            },
            "required": [
              "janelaInicio",
              "janelaFim",
              "fuso",
              "exigeLocal"
            ],
            "additionalProperties": false,
            "description": "Para avisar antes do envio o que o servidor vai exigir: a janela do pedido (com as tolerâncias da turma), o fuso da instituição (outro dia = data local diferente) e se a cerca vale (sem localização, será preciso justificar). O servidor continua decidindo: isto só evita enviar, receber erro e enviar de novo."
          }
        },
        "required": [
          "id",
          "matriculaId",
          "data",
          "horaInicio",
          "horaFim",
          "descricao",
          "local",
          "obrigatoria",
          "cancelada",
          "turma",
          "disciplina",
          "instituicao",
          "estado",
          "presencaId",
          "solicitadaEm",
          "avaliadaEm",
          "comentarioAvaliador",
          "regrasPedido"
        ],
        "additionalProperties": false
      },
      "MinhaConversa": {
        "type": "object",
        "properties": {
          "turmaId": {
            "type": "string",
            "format": "uuid"
          },
          "turmaNome": {
            "type": "string"
          },
          "disciplinaNome": {
            "type": "string"
          },
          "instituicaoSigla": {
            "type": "string"
          },
          "ativa": {
            "type": "boolean"
          },
          "naoLida": {
            "type": "boolean",
            "description": "Há notificação de mensagem não lida nesta turma."
          }
        },
        "required": [
          "turmaId",
          "turmaNome",
          "disciplinaNome",
          "instituicaoSigla",
          "ativa",
          "naoLida"
        ],
        "additionalProperties": false
      },
      "MinhasAtividades": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MinhaAtividadeDto"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "MinhasConversas": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MinhaConversa"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "NivelSupervisao": {
        "type": "integer",
        "minimum": 1,
        "maximum": 5
      },
      "Nota": {
        "type": "object",
        "properties": {
          "criterioId": {
            "type": "string",
            "format": "uuid"
          },
          "valor": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "criterioId",
          "valor"
        ],
        "additionalProperties": false
      },
      "NotificacaoDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "evento": {
            "type": "string",
            "enum": [
              "PEDIDO_PENDENTE",
              "LEMBRETE_AVALIADOR",
              "AVALIACAO_FEITA",
              "MENSAGEM_CHAT",
              "LEMBRETE_ATIVIDADE",
              "CONVITE_SUS",
              "CONTA_EXCLUIDA"
            ]
          },
          "criadaEm": {
            "type": "string"
          },
          "lida": {
            "type": "boolean"
          },
          "turmaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "description": "Só ids e nomes de turma e atividade, para montar o texto e o link no idioma de quem lê. Nunca o texto de uma mensagem."
          },
          "turmaNome": {
            "type": [
              "string",
              "null"
            ]
          },
          "instituicaoNome": {
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "description": "Nome da instituição (só no aviso de conta excluída, que não tem turma)."
          },
          "atividadeId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "atividadeData": {
            "type": [
              "string",
              "null"
            ],
            "description": "Data da atividade (AAAA-MM-DD), quando houver."
          },
          "quantidade": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991,
            "description": "Quantos eventos esta notificação junta (ex.: 3 mensagens novas)."
          }
        },
        "required": [
          "id",
          "evento",
          "criadaEm",
          "lida",
          "turmaId",
          "turmaNome",
          "instituicaoNome",
          "atividadeId",
          "atividadeData",
          "quantidade"
        ],
        "additionalProperties": false
      },
      "NotificacoesPagina": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NotificacaoDto"
            }
          },
          "proximo": {
            "type": [
              "string",
              "null"
            ]
          },
          "naoLidas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "items",
          "proximo",
          "naoLidas"
        ],
        "additionalProperties": false
      },
      "Painel": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PainelItem"
            }
          },
          "truncado": {
            "type": "boolean",
            "description": "Havia mais linhas do que o limite."
          },
          "opcoes": {
            "type": "object",
            "properties": {
              "instituicoes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "sigla": {
                      "type": "string"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "sigla",
                    "nome"
                  ],
                  "additionalProperties": false
                }
              },
              "disciplinas": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "sigla": {
                      "type": "string"
                    },
                    "nome": {
                      "type": "string"
                    },
                    "instituicaoId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "id",
                    "sigla",
                    "nome",
                    "instituicaoId"
                  ],
                  "additionalProperties": false
                }
              },
              "turmas": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    },
                    "disciplinaId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "ativo": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "nome",
                    "disciplinaId",
                    "ativo"
                  ],
                  "additionalProperties": false
                }
              },
              "alunos": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "nome"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "instituicoes",
              "disciplinas",
              "turmas",
              "alunos"
            ],
            "additionalProperties": false,
            "description": "Opções dos filtros: tudo o que a pessoa enxerga, independente dos filtros ativos."
          }
        },
        "required": [
          "items",
          "truncado",
          "opcoes"
        ],
        "additionalProperties": false
      },
      "PainelItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "data": {
            "$ref": "#/components/schemas/Data"
          },
          "horaInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "horaFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hora"
              },
              {
                "type": "null"
              }
            ]
          },
          "descricao": {
            "type": [
              "string",
              "null"
            ]
          },
          "local": {
            "type": [
              "string",
              "null"
            ]
          },
          "obrigatoria": {
            "type": "boolean"
          },
          "cancelada": {
            "type": "boolean"
          },
          "turma": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "disciplina": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "instituicao": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "estado": {
            "type": "string",
            "enum": [
              "NAO_SOLICITADA",
              "SOLICITADA",
              "CONFIRMADA",
              "REJEITADA"
            ]
          },
          "presencaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "solicitadaEm": {
            "type": [
              "string",
              "null"
            ]
          },
          "avaliadaEm": {
            "type": [
              "string",
              "null"
            ]
          },
          "comentarioAvaliador": {
            "type": [
              "string",
              "null"
            ]
          },
          "relato": {
            "type": [
              "string",
              "null"
            ]
          },
          "regrasPedido": {
            "type": "object",
            "properties": {
              "janelaInicio": {
                "type": "string"
              },
              "janelaFim": {
                "type": "string"
              },
              "fuso": {
                "type": "string"
              },
              "exigeLocal": {
                "type": "boolean"
              }
            },
            "required": [
              "janelaInicio",
              "janelaFim",
              "fuso",
              "exigeLocal"
            ],
            "additionalProperties": false
          },
          "aluno": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "nome"
            ],
            "additionalProperties": false
          },
          "proprio": {
            "type": "boolean",
            "description": "A linha é da própria pessoa (como aluna)."
          },
          "podeAvaliar": {
            "type": "boolean",
            "description": "Pode confirmar ou rejeitar esta presença (avalia a turma e não é a própria)."
          }
        },
        "required": [
          "id",
          "matriculaId",
          "data",
          "horaInicio",
          "horaFim",
          "descricao",
          "local",
          "obrigatoria",
          "cancelada",
          "turma",
          "disciplina",
          "instituicao",
          "estado",
          "presencaId",
          "solicitadaEm",
          "avaliadaEm",
          "comentarioAvaliador",
          "regrasPedido",
          "aluno",
          "proprio",
          "podeAvaliar"
        ],
        "additionalProperties": false
      },
      "ParametrosDto": {
        "type": "object",
        "properties": {
          "nivel": {
            "type": "string",
            "enum": [
              "plataforma",
              "instituicao"
            ]
          },
          "valores": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "herdados": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        },
        "required": [
          "nivel",
          "valores",
          "herdados"
        ],
        "additionalProperties": false
      },
      "ParametrosInstituicaoAtualizar": {
        "type": "object",
        "properties": {
          "turma.tolerancia_antes_min": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "turma.tolerancia_depois_min": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "senha.tamanho_minimo": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 8,
                "maximum": 128
              },
              {
                "type": "null"
              }
            ]
          },
          "senha.historico": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 24
              },
              {
                "type": "null"
              }
            ]
          },
          "senha.intervalo_min_horas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 168
              },
              {
                "type": "null"
              }
            ]
          },
          "sessao.expira_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 365
              },
              {
                "type": "null"
              }
            ]
          },
          "auditoria.retencao_meses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 240
              },
              {
                "type": "null"
              }
            ]
          },
          "lembrete.atividade_antecedencia_min": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 1440
              },
              {
                "type": "null"
              }
            ]
          },
          "lembrete.avaliador_pendencia_horas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 168
              },
              {
                "type": "null"
              }
            ]
          },
          "notificacao.silencio_inicio_h": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 23
              },
              {
                "type": "null"
              }
            ]
          },
          "notificacao.silencio_fim_h": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 23
              },
              {
                "type": "null"
              }
            ]
          },
          "sus.convite_intervalo_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 730
              },
              {
                "type": "null"
              }
            ]
          },
          "feedback.prazo_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          },
          "chat.retencao_meses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 240
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "ParametrosPlataformaAtualizar": {
        "type": "object",
        "properties": {
          "turma.tolerancia_antes_min": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "turma.tolerancia_depois_min": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "senha.tamanho_minimo": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 8,
                "maximum": 128
              },
              {
                "type": "null"
              }
            ]
          },
          "senha.historico": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 24
              },
              {
                "type": "null"
              }
            ]
          },
          "senha.intervalo_min_horas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 168
              },
              {
                "type": "null"
              }
            ]
          },
          "sessao.expira_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 365
              },
              {
                "type": "null"
              }
            ]
          },
          "auditoria.retencao_meses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 240
              },
              {
                "type": "null"
              }
            ]
          },
          "dados.retencao_meses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 240
              },
              {
                "type": "null"
              }
            ]
          },
          "lembrete.atividade_antecedencia_min": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 1440
              },
              {
                "type": "null"
              }
            ]
          },
          "lembrete.avaliador_pendencia_horas": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 168
              },
              {
                "type": "null"
              }
            ]
          },
          "notificacao.silencio_inicio_h": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 23
              },
              {
                "type": "null"
              }
            ]
          },
          "notificacao.silencio_fim_h": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 23
              },
              {
                "type": "null"
              }
            ]
          },
          "sus.convite_intervalo_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 730
              },
              {
                "type": "null"
              }
            ]
          },
          "feedback.prazo_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          },
          "chat.retencao_meses": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 240
              },
              {
                "type": "null"
              }
            ]
          },
          "notificacao.retencao_dias": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 3650
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "Pendente": {
        "type": "object",
        "properties": {
          "atividade": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "data": {
                "$ref": "#/components/schemas/Data"
              },
              "descricao": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id",
              "data",
              "descricao"
            ],
            "additionalProperties": false
          },
          "linha": {
            "$ref": "#/components/schemas/PresencaLinha"
          }
        },
        "required": [
          "atividade",
          "linha"
        ],
        "additionalProperties": false
      },
      "Pendentes": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Pendente"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "PerfilAtualizar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "nationality": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "pattern": "^[A-Za-z]{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "lattesUrl": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string",
                    "const": ""
                  },
                  {
                    "type": "string",
                    "maxLength": 300
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Endereço do currículo Lattes (https)."
          },
          "conselhoCodigo": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 60
              },
              {
                "type": "null"
              }
            ],
            "description": "Número no conselho de classe. Só a própria pessoa vê."
          },
          "anoGraduacao": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1930,
                "maximum": 2100
              },
              {
                "type": "null"
              }
            ]
          },
          "residencia": {
            "type": "boolean"
          },
          "especializacao": {
            "type": "boolean"
          },
          "mestrado": {
            "type": "boolean"
          },
          "doutorado": {
            "type": "boolean"
          },
          "minibio": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "PerfilDto": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "nationality": {
            "type": [
              "string",
              "null"
            ]
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "lattesUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "conselhoCodigo": {
            "type": [
              "string",
              "null"
            ]
          },
          "anoGraduacao": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "residencia": {
            "type": "boolean"
          },
          "especializacao": {
            "type": "boolean"
          },
          "mestrado": {
            "type": "boolean"
          },
          "doutorado": {
            "type": "boolean"
          },
          "minibio": {
            "type": [
              "string",
              "null"
            ]
          },
          "temFoto": {
            "type": "boolean",
            "description": "Há foto de perfil? A foto em si vem de `GET /me/foto`."
          },
          "fotoEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Muda a cada troca de foto (serve para renovar o cache do avatar)."
          }
        },
        "required": [
          "nome",
          "email",
          "nationality",
          "locale",
          "lattesUrl",
          "conselhoCodigo",
          "anoGraduacao",
          "residencia",
          "especializacao",
          "mestrado",
          "doutorado",
          "minibio",
          "temFoto",
          "fotoEm"
        ],
        "additionalProperties": false
      },
      "PoliticaDto": {
        "type": "object",
        "properties": {
          "versao": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "textos": {
            "$ref": "#/components/schemas/TermoTextos"
          },
          "publicadoEm": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "urlPublica": {
            "type": "string"
          }
        },
        "required": [
          "versao",
          "textos",
          "publicadoEm",
          "urlPublica"
        ],
        "additionalProperties": false
      },
      "PoliticaPublica": {
        "type": "object",
        "properties": {
          "instituicao": {
            "type": "object",
            "properties": {
              "sigla": {
                "type": "string"
              },
              "nome": {
                "type": "string"
              }
            },
            "required": [
              "sigla",
              "nome"
            ],
            "additionalProperties": false
          },
          "politica": {
            "$ref": "#/components/schemas/TermoDto"
          },
          "privacidade": {
            "$ref": "#/components/schemas/PrivacidadeDto"
          },
          "urlPublica": {
            "type": "string"
          }
        },
        "required": [
          "instituicao",
          "politica",
          "privacidade",
          "urlPublica"
        ],
        "additionalProperties": false
      },
      "Preferencia": {
        "type": "object",
        "properties": {
          "evento": {
            "type": "string",
            "enum": [
              "PEDIDO_PENDENTE",
              "LEMBRETE_AVALIADOR",
              "AVALIACAO_FEITA",
              "MENSAGEM_CHAT",
              "LEMBRETE_ATIVIDADE",
              "CONVITE_SUS",
              "CONTA_EXCLUIDA"
            ]
          },
          "inApp": {
            "type": "boolean"
          },
          "push": {
            "type": "boolean"
          }
        },
        "required": [
          "evento",
          "inApp",
          "push"
        ],
        "additionalProperties": false
      },
      "Preferencias": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Preferencia"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "PreferenciasAtualizar": {
        "type": "object",
        "properties": {
          "items": {
            "minItems": 1,
            "maxItems": 7,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Preferencia"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "PresencaDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "atividadeId": {
            "type": "string",
            "format": "uuid"
          },
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "estado": {
            "type": "string",
            "enum": [
              "SOLICITADA",
              "CONFIRMADA",
              "REJEITADA"
            ]
          },
          "solicitadaEm": {
            "type": "string"
          },
          "capturadaEm": {
            "type": [
              "string",
              "null"
            ]
          },
          "relato": {
            "type": [
              "string",
              "null"
            ]
          },
          "justificativa": {
            "type": [
              "string",
              "null"
            ]
          },
          "excecoes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "FORA_DA_JANELA",
                "FORA_DA_CERCA",
                "OUTRO_DIA"
              ]
            }
          },
          "avaliadaEm": {
            "type": [
              "string",
              "null"
            ]
          },
          "comentarioAvaliador": {
            "type": [
              "string",
              "null"
            ]
          },
          "notas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Nota"
            },
            "description": "Só a quem avalia a turma. O aluno vê as próprias notas pelo painel, depois que a turma as libera."
          },
          "nivelSupervisao": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NivelSupervisao"
              },
              {
                "type": "null"
              }
            ],
            "description": "Nível de supervisão dado pelo último avaliador; nulo = não informado. Só a quem avalia (o aluno o lê na avaliação, depois da liberação)."
          },
          "relatoEditadoEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Última edição do relato pelo aluno; nulo = nunca editado. Depois de `avaliadaEm` = editado depois da avaliação."
          },
          "relatoVersoes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Quantas versões anteriores do relato existem (quem avalia as lê em `.../relato/versoes`)."
          }
        },
        "required": [
          "id",
          "atividadeId",
          "matriculaId",
          "estado",
          "solicitadaEm",
          "capturadaEm",
          "relato",
          "justificativa",
          "excecoes",
          "avaliadaEm",
          "comentarioAvaliador",
          "notas"
        ],
        "additionalProperties": false
      },
      "PresencaLinha": {
        "type": "object",
        "properties": {
          "matriculaId": {
            "type": "string",
            "format": "uuid"
          },
          "usuarioId": {
            "type": "string",
            "format": "uuid"
          },
          "nome": {
            "type": "string"
          },
          "presenca": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PresencaDto"
              },
              {
                "type": "null"
              }
            ]
          },
          "lat": {
            "type": [
              "number",
              "null"
            ]
          },
          "lng": {
            "type": [
              "number",
              "null"
            ]
          },
          "precisaoM": {
            "type": [
              "number",
              "null"
            ]
          },
          "avaliador": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "nome": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "nome"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ],
            "description": "Quem avaliou por último: só na visão de quem avalia a turma, nunca na do aluno."
          },
          "dentroDaArea": {
            "type": "string",
            "enum": [
              "dentro",
              "fora",
              "sem_localizacao"
            ],
            "description": "Onde o pedido ficou em relação à cerca da atividade, só a faixa (nunca metros): a mesma regra que exige justificativa. Ausente = a cerca não vale nesta atividade (desligada ou sem centro/raio) ou não há pedido."
          }
        },
        "required": [
          "matriculaId",
          "usuarioId",
          "nome",
          "presenca",
          "lat",
          "lng",
          "precisaoM"
        ],
        "additionalProperties": false
      },
      "PresencaLinhas": {
        "type": "object",
        "properties": {
          "atividade": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "turmaId": {
                "type": "string",
                "format": "uuid"
              },
              "data": {
                "$ref": "#/components/schemas/Data"
              },
              "descricao": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id",
              "turmaId",
              "data",
              "descricao"
            ],
            "additionalProperties": false
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PresencaLinha"
            }
          }
        },
        "required": [
          "atividade",
          "items"
        ],
        "additionalProperties": false
      },
      "PresencaSolicitar": {
        "type": "object",
        "properties": {
          "relato": {
            "type": "string",
            "maxLength": 2000,
            "description": "Até 2000 caracteres."
          },
          "justificativa": {
            "type": "string",
            "maxLength": 2000,
            "description": "Obrigatória quando o pedido cai em exceção."
          },
          "clienteId": {
            "type": "string",
            "format": "uuid",
            "description": "Gerado no aparelho: reenviar a fila offline não duplica."
          },
          "capturadaEm": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
            "description": "Instante em que o aparelho capturou o pedido (fila offline)."
          },
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "lng": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "precisaoM": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          }
        },
        "additionalProperties": false
      },
      "PrimeiroAcessoConfirmarInput": {
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/Email"
          },
          "codigo": {
            "type": "string",
            "pattern": "^\\d{6}$"
          },
          "senha": {
            "$ref": "#/components/schemas/Senha"
          }
        },
        "required": [
          "email",
          "codigo",
          "senha"
        ]
      },
      "PrimeiroAcessoSolicitarInput": {
        "type": "object",
        "properties": {
          "email": {
            "$ref": "#/components/schemas/Email"
          }
        },
        "required": [
          "email"
        ]
      },
      "PrivacidadeDto": {
        "type": "object",
        "properties": {
          "controlador": {
            "type": [
              "string",
              "null"
            ]
          },
          "encarregado": {
            "type": [
              "string",
              "null"
            ]
          },
          "contato": {
            "type": "string"
          },
          "contatoPadrao": {
            "type": "boolean"
          }
        },
        "required": [
          "controlador",
          "encarregado",
          "contato",
          "contatoPadrao"
        ],
        "additionalProperties": false
      },
      "PushWebConfig": {
        "type": "object",
        "properties": {
          "apiKey": {
            "type": "string"
          },
          "appId": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "messagingSenderId": {
            "type": "string"
          },
          "vapidKey": {
            "type": "string",
            "description": "Chave pública VAPID, se o projeto usa uma própria; sem ela o SDK usa a padrão do Firebase."
          }
        },
        "required": [
          "apiKey",
          "appId",
          "projectId",
          "messagingSenderId"
        ],
        "additionalProperties": false
      },
      "QrResolver": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "minLength": 20,
            "maxLength": 2000
          }
        },
        "required": [
          "token"
        ],
        "additionalProperties": false
      },
      "QrResolvido": {
        "type": "object",
        "properties": {
          "turmaId": {
            "type": "string",
            "format": "uuid"
          },
          "atividade": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "data": {
                "$ref": "#/components/schemas/Data"
              },
              "descricao": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id",
              "data",
              "descricao"
            ],
            "additionalProperties": false
          },
          "linha": {
            "$ref": "#/components/schemas/PresencaLinha"
          }
        },
        "required": [
          "turmaId",
          "atividade",
          "linha"
        ],
        "additionalProperties": false
      },
      "QrToken": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "expiraEm": {
            "type": "string"
          }
        },
        "required": [
          "token",
          "expiraEm"
        ],
        "additionalProperties": false
      },
      "RedefinirSenhaInput": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "minLength": 20,
            "maxLength": 200
          },
          "senha": {
            "$ref": "#/components/schemas/Senha"
          }
        },
        "required": [
          "token",
          "senha"
        ]
      },
      "RefreshInput": {
        "type": "object",
        "properties": {
          "refreshToken": {
            "type": "string",
            "minLength": 20,
            "maxLength": 200
          }
        },
        "required": [
          "refreshToken"
        ]
      },
      "RelatoEditar": {
        "type": "object",
        "properties": {
          "relato": {
            "type": "string",
            "maxLength": 2000
          }
        },
        "required": [
          "relato"
        ],
        "additionalProperties": false
      },
      "RelatoVersoes": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "texto": {
                  "type": "string"
                },
                "substituidoEm": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "texto",
                "substituidoEm"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "Rubrica": {
        "type": "object",
        "propertyNames": {
          "type": "string",
          "pattern": "^(0|[1-9][0-9]?|100)$"
        },
        "additionalProperties": {
          "type": "string",
          "minLength": 1,
          "maxLength": 40
        }
      },
      "Senha": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128
      },
      "Sessao": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string"
          },
          "refreshToken": {
            "type": "string"
          },
          "expiresIn": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Validade do token de acesso, em segundos."
          },
          "usuario": {
            "$ref": "#/components/schemas/Me"
          }
        },
        "required": [
          "accessToken",
          "refreshToken",
          "expiresIn",
          "usuario"
        ],
        "additionalProperties": false
      },
      "SessaoAtivaDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "agente": {
            "type": [
              "string",
              "null"
            ],
            "description": "User-Agent informado no login, truncado; pode ser nulo."
          },
          "criadaEm": {
            "type": "string"
          },
          "expiraEm": {
            "type": "string"
          },
          "atual": {
            "type": "boolean",
            "description": "É a sessão de quem pediu a lista (só se o token de renovação foi informado)."
          }
        },
        "required": [
          "id",
          "agente",
          "criadaEm",
          "expiraEm",
          "atual"
        ],
        "additionalProperties": false
      },
      "SessoesAtivas": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SessaoAtivaDto"
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "SusEnviada": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "pontuacao": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "pontuacao"
        ],
        "additionalProperties": false
      },
      "SusRespostaInput": {
        "type": "object",
        "properties": {
          "respostas": {
            "minItems": 10,
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5
            },
            "description": "Os 10 itens da versão positiva, na ordem, escala 1–5."
          },
          "observacoes": {
            "type": "string",
            "maxLength": 2000
          }
        },
        "required": [
          "respostas"
        ]
      },
      "SusResumo": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "media": {
            "type": [
              "number",
              "null"
            ],
            "description": "Média da pontuação SUS; nula sem respostas."
          },
          "porItem": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Média de cada item (1–5), na ordem; vazia sem respostas."
          }
        },
        "required": [
          "total",
          "media",
          "porItem"
        ],
        "additionalProperties": false
      },
      "TermoDto": {
        "type": "object",
        "properties": {
          "versao": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "textos": {
            "$ref": "#/components/schemas/TermoTextos"
          },
          "publicadoEm": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "versao",
          "textos",
          "publicadoEm"
        ],
        "additionalProperties": false
      },
      "TermoPublicar": {
        "type": "object",
        "properties": {
          "textos": {
            "$ref": "#/components/schemas/TermoTextos"
          }
        },
        "required": [
          "textos"
        ]
      },
      "TermosDosMeus": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "instituicao": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "sigla": {
                      "type": "string"
                    },
                    "nome": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "sigla",
                    "nome"
                  ],
                  "additionalProperties": false
                },
                "termo": {
                  "$ref": "#/components/schemas/TermoDto"
                },
                "politica": {
                  "$ref": "#/components/schemas/TermoDto"
                },
                "urlPublica": {
                  "type": "string"
                },
                "privacidade": {
                  "$ref": "#/components/schemas/PrivacidadeDto"
                }
              },
              "required": [
                "instituicao",
                "termo",
                "politica",
                "urlPublica",
                "privacidade"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "TermoTextos": {
        "type": "object",
        "properties": {
          "pt-BR": {
            "type": "string",
            "maxLength": 60000
          },
          "es": {
            "type": "string",
            "maxLength": 60000
          },
          "en-US": {
            "type": "string",
            "maxLength": 60000
          }
        },
        "additionalProperties": false
      },
      "TrocarSenhaInput": {
        "type": "object",
        "properties": {
          "senhaAtual": {
            "$ref": "#/components/schemas/Senha"
          },
          "novaSenha": {
            "$ref": "#/components/schemas/Senha"
          }
        },
        "required": [
          "senhaAtual",
          "novaSenha"
        ]
      },
      "TurmaAtualizar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "endereco": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "localAtividade": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "lat": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              },
              {
                "type": "null"
              }
            ]
          },
          "lng": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          },
          "toleranciaAntesMin": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "toleranciaDepoisMin": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "notasVisiveisEm": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          },
          "ativo": {
            "type": "boolean"
          }
        }
      },
      "TurmaCriar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "endereco": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "localAtividade": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "lat": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              },
              {
                "type": "null"
              }
            ]
          },
          "lng": {
            "anyOf": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          },
          "toleranciaAntesMin": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "toleranciaDepoisMin": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 720
              },
              {
                "type": "null"
              }
            ]
          },
          "notasVisiveisEm": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "nome"
        ]
      },
      "TurmaDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "disciplinaId": {
            "type": "string",
            "format": "uuid"
          },
          "instituicaoId": {
            "type": "string",
            "format": "uuid"
          },
          "nome": {
            "type": "string"
          },
          "ativo": {
            "type": "boolean"
          },
          "endereco": {
            "type": [
              "string",
              "null"
            ]
          },
          "localAtividade": {
            "type": [
              "string",
              "null"
            ]
          },
          "lat": {
            "type": [
              "number",
              "null"
            ]
          },
          "lng": {
            "type": [
              "number",
              "null"
            ]
          },
          "toleranciaAntesMin": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "toleranciaDepoisMin": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "notasVisiveisEm": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          },
          "dataInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          },
          "dataFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "disciplinaId",
          "instituicaoId",
          "nome",
          "ativo",
          "endereco",
          "localAtividade",
          "lat",
          "lng",
          "toleranciaAntesMin",
          "toleranciaDepoisMin",
          "notasVisiveisEm",
          "dataInicio",
          "dataFim"
        ],
        "additionalProperties": false
      },
      "TurmaPeriodo": {
        "type": "object",
        "properties": {
          "dataInicio": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          },
          "dataFim": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "dataInicio",
          "dataFim"
        ],
        "additionalProperties": false
      },
      "TurmaProntidao": {
        "type": "object",
        "properties": {
          "centro": {
            "type": "boolean"
          },
          "toleranciaPropria": {
            "type": "boolean",
            "description": "Tolerância própria da turma; `false` = vale o padrão."
          },
          "atividadesFuturas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Atividades não canceladas de hoje em diante (no fuso da instituição)."
          },
          "alunos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "alunosComAcesso": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Alunos que já aceitaram o convite (conta ativa) e conseguem registrar presença."
          },
          "avaliadores": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Pessoas com conta ativa que podem confirmar presença nesta turma, em qualquer nível (turma, disciplina, instituição)."
          },
          "avaliadoresConvidados": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Pessoas que poderão avaliar, mas ainda não aceitaram o convite."
          }
        },
        "required": [
          "centro",
          "toleranciaPropria",
          "atividadesFuturas",
          "alunos",
          "alunosComAcesso",
          "avaliadores",
          "avaliadoresConvidados"
        ],
        "additionalProperties": false
      },
      "UsuarioAtualizar": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "nationality": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "pattern": "^[A-Za-z]{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "ATIVO",
              "SUSPENSO"
            ]
          }
        }
      },
      "UsuarioContagens": {
        "type": "object",
        "properties": {
          "todos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "ativos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "convidados": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "suspensos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "todos",
          "ativos",
          "convidados",
          "suspensos"
        ],
        "additionalProperties": false
      },
      "UsuarioDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "CONVIDADO",
              "ATIVO",
              "SUSPENSO"
            ]
          },
          "nationality": {
            "type": [
              "string",
              "null"
            ]
          },
          "locale": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "pt-BR",
                  "es",
                  "en-US"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "compartilhado": {
            "type": "boolean",
            "description": "Tem vínculo ou matrícula em outra instituição: só a plataforma altera nome e status."
          },
          "jaExistia": {
            "type": "boolean",
            "description": "Só na resposta de criar: o e-mail já tinha conta e a pessoa foi vinculada a ela."
          }
        },
        "required": [
          "id",
          "email",
          "nome",
          "status",
          "nationality",
          "locale",
          "compartilhado"
        ],
        "additionalProperties": false
      },
      "UsuarioLista": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsuarioDto"
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "contagens": {
            "$ref": "#/components/schemas/UsuarioContagens"
          }
        },
        "required": [
          "items",
          "total"
        ],
        "additionalProperties": false
      },
      "VinculoAtualizar": {
        "type": "object",
        "properties": {
          "podeAvaliar": {
            "type": "boolean"
          },
          "podeCadastrar": {
            "type": "boolean"
          },
          "ativo": {
            "type": "boolean"
          }
        }
      },
      "VinculoCriar": {
        "type": "object",
        "properties": {
          "usuarioId": {
            "type": "string",
            "format": "uuid"
          },
          "papel": {
            "type": "string",
            "enum": [
              "CURADOR",
              "PRECEPTOR",
              "COORDENADOR",
              "PROFESSOR",
              "AUXILIAR"
            ]
          },
          "disciplinaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "turmaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "podeAvaliar": {
            "default": false,
            "type": "boolean"
          },
          "podeCadastrar": {
            "default": false,
            "type": "boolean"
          }
        },
        "required": [
          "usuarioId",
          "papel"
        ]
      },
      "VinculoDto": {
        "type": "object",
        "properties": {
          "papel": {
            "type": "string",
            "enum": [
              "ADMIN_PLATAFORMA",
              "CURADOR",
              "PRECEPTOR",
              "COORDENADOR",
              "PROFESSOR",
              "AUXILIAR"
            ]
          },
          "instituicaoId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "disciplinaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "turmaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "podeAvaliar": {
            "type": "boolean"
          },
          "podeCadastrar": {
            "type": "boolean"
          }
        },
        "required": [
          "papel",
          "instituicaoId",
          "disciplinaId",
          "turmaId",
          "podeAvaliar",
          "podeCadastrar"
        ],
        "additionalProperties": false
      },
      "VinculoItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "usuarioId": {
            "type": "string",
            "format": "uuid"
          },
          "nome": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "papel": {
            "type": "string",
            "enum": [
              "ADMIN_PLATAFORMA",
              "CURADOR",
              "PRECEPTOR",
              "COORDENADOR",
              "PROFESSOR",
              "AUXILIAR"
            ]
          },
          "instituicaoId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "disciplinaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "turmaId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "podeAvaliar": {
            "type": "boolean"
          },
          "podeCadastrar": {
            "type": "boolean"
          },
          "ativo": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "usuarioId",
          "nome",
          "email",
          "papel",
          "instituicaoId",
          "disciplinaId",
          "turmaId",
          "podeAvaliar",
          "podeCadastrar",
          "ativo"
        ],
        "additionalProperties": false
      }
    }
  },
  "tags": [
    {
      "name": "Auditoria",
      "description": "Registro de eventos da instituição, com estatísticas e exportação."
    },
    {
      "name": "Auth",
      "description": "Entrar, renovar e encerrar sessões; convite, primeiro acesso, troca e recuperação de senha."
    },
    {
      "name": "Contato",
      "description": "Formulário de contato do site, sem login."
    },
    {
      "name": "Disciplinas",
      "description": "Disciplinas de uma instituição."
    },
    {
      "name": "Catalogo",
      "description": "Itens de catálogo de atividades profissionais de uma disciplina, usados para classificar as atividades."
    },
    {
      "name": "Criterios",
      "description": "Critérios (e rubricas) que a disciplina usa para dar notas."
    },
    {
      "name": "Turmas",
      "description": "Turmas de uma disciplina: cadastro, período, equipe auxiliar e prontidão."
    },
    {
      "name": "Evolucao",
      "description": "Evolução longitudinal do aluno por disciplina."
    },
    {
      "name": "Perfil",
      "description": "Perfil da própria pessoa, foto, conexões ativas, termos e a pesquisa de satisfação do aplicativo."
    },
    {
      "name": "Health",
      "description": "Verificação simples de que a API está no ar."
    },
    {
      "name": "Instituicoes",
      "description": "Instituições, política de privacidade e termo de uso de cada uma."
    },
    {
      "name": "Importacao",
      "description": "Importação em lote de pessoas, alunos e atividades, com simulação antes de gravar."
    },
    {
      "name": "Parametros",
      "description": "Parâmetros da plataforma e da instituição, com herança entre os níveis."
    },
    {
      "name": "Usuarios",
      "description": "Pessoas e papéis de uma instituição: cadastro, convite e vínculos."
    },
    {
      "name": "Conta",
      "description": "Exclusão da própria conta, no aplicativo ou pela web."
    },
    {
      "name": "Me",
      "description": "Visões da própria pessoa: início, painel de atividades e estatísticas de presença."
    },
    {
      "name": "PresencaAluno",
      "description": "O que o aluno faz: pedir presença, editar o relato e gerar o QR da atividade."
    },
    {
      "name": "Conversa",
      "description": "Mensagens entre os participantes de uma turma."
    },
    {
      "name": "Dispositivos",
      "description": "Aparelhos que recebem notificações push."
    },
    {
      "name": "Notificacoes",
      "description": "Avisos da pessoa e suas preferências por tipo."
    },
    {
      "name": "Autoavaliacao",
      "description": "Autoavaliação final do aluno em uma turma."
    },
    {
      "name": "Avaliacao",
      "description": "Notas e avaliação de uma matrícula, vistas pela equipe ou pelo próprio aluno."
    },
    {
      "name": "Feedback",
      "description": "Feedback de encerramento que a equipe escreve para cada aluno."
    },
    {
      "name": "PresencaAvaliador",
      "description": "O que quem avalia faz: fila de pedidos, confirmar ou rejeitar, lote, leitura de QR e versões do relato."
    },
    {
      "name": "PoliticaPublica",
      "description": "Página pública da política de privacidade de uma instituição, sem login."
    },
    {
      "name": "PushWeb",
      "description": "Configuração pública para receber notificações push no navegador."
    },
    {
      "name": "Atividades",
      "description": "Calendário de atividades de uma turma (aulas, plantões, práticas)."
    },
    {
      "name": "EstatisticasTurma",
      "description": "Estatísticas de presença e notas de uma turma, com exportação."
    },
    {
      "name": "Frequencia",
      "description": "Matriz de frequência de uma turma (alunos × atividades)."
    },
    {
      "name": "Matriculas",
      "description": "Alunos matriculados em uma turma."
    }
  ]
}