{
  "openapi": "3.1.0",
  "info": {
    "title": "API de Presente",
    "version": "1",
    "description": "Referencia de los endpoints, parámetros, modelos y errores de la API de Presente. Cada ruta indica quién puede llamarla y el límite de uso. Las rutas son las mismas que usa la aplicación: no hay una API separada para integraciones, y las rutas internas no tienen garantía de estabilidad. Para los conceptos (autenticación, permisos, paginación, errores), empiece por la [guía de integración](/es/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 auditoría de la institución"
      }
    },
    "/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": "Estadísticas de los eventos de auditoría"
      }
    },
    "/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 la auditoría en 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": "Acepta la invitación y define la contraseña"
      }
    },
    "/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": "Pide el correo de recuperación de contraseña",
        "description": "Responde siempre igual, exista o no el correo, para no revelar quién tiene registro."
      }
    },
    "/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": "Inicia sesión con correo y contraseña",
        "description": "Devuelve `accessToken` (válido 15 minutos) y `refreshToken` (de un solo uso, hasta 30 días). Cinco fallos seguidos en 15 minutos bloquean el intento con 429 y `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": "Cierra la sesión del token de renovación"
      }
    },
    "/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": "Cierra todas las sesiones de la cuenta"
      }
    },
    "/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": "Datos de la persona autenticada y sus 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": "Pide el código del primer acceso"
      }
    },
    "/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 el primer acceso con el 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": "Restablece la contraseña con el token del correo"
      }
    },
    "/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": "Cambia el token de renovación por una sesión nueva",
        "description": "El token de renovación es de un solo uso: reutilizar uno ya usado cierra todas las sesiones de la cuenta. Guarde siempre el nuevo par devuelto."
      }
    },
    "/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": "Cambia la propia contraseña"
      }
    },
    "/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": "Envía un mensaje por el formulario de contacto"
      }
    },
    "/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": "Lee una asignatura"
      },
      "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": "Actualiza una asignatura"
      }
    },
    "/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 el catálogo de actividades de la asignatura"
      },
      "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": "Crea un elemento en el catálogo de la asignatura"
      }
    },
    "/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": "Actualiza un elemento del 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": "Fusiona un elemento del catálogo con otro"
      }
    },
    "/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 los criterios de evaluación de la asignatura"
      },
      "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": "Crea un criterio de evaluación"
      }
    },
    "/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": "Actualiza un criterio de evaluación"
      }
    },
    "/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 los grupos de una asignatura"
      },
      "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": "Crea un grupo en la asignatura",
        "description": "No es idempotente: un grupo no tiene identificador único, así que repetir la llamada crea otro grupo."
      }
    },
    "/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 alumnos con la evolución que la persona puede 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": "Envía la respuesta de la encuesta de satisfacción"
      }
    },
    "/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": "Resumen de la encuesta de satisfacción"
      }
    },
    "/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 si la API está en línea",
        "description": "No exige inicio de sesión. Sirve para monitorear si el servicio 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 las instituciones que la persona ve"
      },
      "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": "Crea una institución e invita al primer 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": "Lee una institución"
      },
      "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": "Actualiza una institución"
      }
    },
    "/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 las asignaturas de una institución"
      },
      "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": "Crea una asignatura en la institución",
        "description": "`sigla` y `nome` son únicos en la institución: repetir devuelve 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 personas (equipo y alumnos) por CSV",
        "description": "El CSV va como texto en el campo `csv` (máx. 500 filas y 90 000 caracteres). Use `modo: simular` para ver el informe antes de `aplicar`. La importación es idempotente: quien ya existe vuelve 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": "Lee los parámetros de la institución"
      },
      "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": "Actualiza los parámetros de la institución"
      }
    },
    "/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": "Lee la política de privacidad vigente de la institución"
      },
      "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 una nueva versión de la política de privacidad"
      }
    },
    "/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": "Lee los términos de uso vigentes de la institución"
      },
      "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 una nueva versión de los términos 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 las personas de la institución"
      },
      "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": "Crea una persona del equipo y le da el 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": "Lee una persona de la institución"
      },
      "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": "Actualiza una persona de la institución"
      }
    },
    "/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": "Reenvía la invitación por correo"
      }
    },
    "/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 los vínculos de la institución"
      },
      "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": "Crea un vínculo (rol y ámbito) para una persona"
      }
    },
    "/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": "Actualiza un 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": "Evolución de un alumno (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": "Elimina la propia cuenta (confirma con la contraseña)"
      },
      "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": "Actualiza el propio 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 las actividades de la persona como alumna"
      }
    },
    "/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": "Pide la asistencia en una actividad"
      }
    },
    "/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 el relato de la propia asistencia"
      }
    },
    "/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": "Genera el QR de la actividad para el alumno"
      }
    },
    "/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": "Inicio de la persona (alumno, evaluador y gestión)"
      }
    },
    "/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 las conversaciones de grupo de la persona"
      }
    },
    "/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 un aparato para recibir 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": "Elimina un aparato del 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": "Estadísticas de asistencia de la persona"
      }
    },
    "/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": "Evolución de la propia persona por asignatura"
      }
    },
    "/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": "Descarga la foto del propio 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": "Envía la foto del propio 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": "Elimina la foto del propio 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 las notificaciones de la persona"
      }
    },
    "/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": "Cuántas notificaciones no se han leído"
      }
    },
    "/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 notificaciones como leídas"
      }
    },
    "/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": "Lee las preferencias de notificación"
      },
      "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": "Actualiza las preferencias de notificación"
      }
    },
    "/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": "Panel de actividades de la persona, con 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": "Lee el propio 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 las conexiones activas de la persona"
      }
    },
    "/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": "Cierra una conexión"
      }
    },
    "/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": "Cierra todas las demás conexiones"
      }
    },
    "/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": "Términos y políticas vigentes de mis instituciones"
      }
    },
    "/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": "Lee la propia autoevaluación final del grupo"
      },
      "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": "Graba la autoevaluación final del grupo"
      }
    },
    "/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": "Mis notas y evaluación en un grupo"
      }
    },
    "/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": "Mi feedback final en un grupo"
      }
    },
    "/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": "Lee los parámetros de la 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": "Actualiza los parámetros de la 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": "Cola de pedidos pendientes de todos los grupos"
      }
    },
    "/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": "Resuelve el QR leído y abre el pedido de asistencia"
      }
    },
    "/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": "Pide la eliminación de cuenta por la web (paso 1)",
        "description": "No exige inicio de sesión. Siempre responde igual, exista o no la cuenta, para no revelar quién tiene registro."
      }
    },
    "/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 la eliminación de cuenta con el enlace (paso 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 privacidad pública de una institución"
      }
    },
    "/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": "Configuración pública del push en el 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 los grupos que la persona ve"
      }
    },
    "/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": "Lee un grupo"
      },
      "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": "Actualiza un grupo"
      }
    },
    "/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 las actividades de un grupo"
      },
      "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": "Crea una actividad en el grupo"
      }
    },
    "/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 actividades de la asignatura del grupo"
      }
    },
    "/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": "Lee una actividad"
      },
      "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": "Elimina una actividad (si no tiene asistencia)",
        "description": "Solo es posible si la actividad aún no tiene asistencia; de lo contrario, cancélela en vez de eliminarla."
      },
      "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": "Actualiza una actividad"
      }
    },
    "/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 o rechaza la asistencia de un alumno"
      }
    },
    "/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 los pedidos de asistencia de una actividad"
      }
    },
    "/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 los auxiliares del grupo"
      }
    },
    "/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 los mensajes de la conversación del grupo"
      }
    },
    "/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": "Envía un mensaje a la conversación del grupo"
      }
    },
    "/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": "Elimina un mensaje"
      },
      "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 un mensaje"
      }
    },
    "/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": "Criterios de evaluación de la asignatura del grupo"
      }
    },
    "/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 las estadísticas del grupo en 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 los feedbacks finales del grupo, por alumno"
      }
    },
    "/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 asistencia del grupo"
      }
    },
    "/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 alumnos del grupo por CSV",
        "description": "El CSV va como texto en el campo `csv` (máx. 500 filas y 90 000 caracteres). Use `modo: simular` antes de `aplicar`. Repetir la importación no 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 actividades del grupo por CSV",
        "description": "Una actividad se reconoce por fecha, hora de inicio y descripción; la importación solo crea, nunca modifica ni borra. 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 las matrículas del grupo"
      },
      "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 a un alumno en el grupo",
        "description": "Indique `usuarioId` (alumno ya registrado) o `email` y `nome` (cuenta nueva, con invitación por correo)."
      }
    },
    "/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": "Activa o desactiva una matrícula",
        "description": "Desactivar la matrícula solo alterna `ativo`: no se borra nada, y reactivar devuelve al alumno al grupo."
      }
    },
    "/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 y evaluación de un alumno en el grupo"
      }
    },
    "/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": "Lee el feedback final de un alumno"
      },
      "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": "Graba el feedback final de un alumno"
      }
    },
    "/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 el período (inicio y fin) del grupo"
      }
    },
    "/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": "Versiones anteriores del relato de una asistencia"
      }
    },
    "/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 varios pedidos de asistencia a la 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": "Cola de pedidos pendientes del grupo"
      }
    },
    "/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": "Qué está ya listo en el grupo (conteos)",
        "description": "Devuelve solo conteos (alumnos con acceso, evaluadores, actividades futuras…), nunca nombres ni correos."
      }
    }
  },
  "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": "Términos aceptados (versión del 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": "Nombre del elemento del catálogo (para listas y pantallas que no cargan el 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": "Ya existen asistencias: la fecha y la hora quedan bloqueadas."
          }
        },
        "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": "Cuántas actividades (ocurrencias) apuntan al elemento."
          }
        },
        "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": "Quién lo hizo: solo el id y el nombre visible. Nulo = el propio sistema o una cuenta ya eliminada (las cuentas anonimizadas aparecen como «Persona eliminada»)."
          },
          "dados": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                },
                {
                  "type": "array",
                  "items": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                }
              ]
            },
            "description": "Detalles del evento, ya filtrados: se omiten los campos que podrían contener texto libre."
          },
          "omitidos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Cuántos campos de los detalles se omitieron por poder contener texto libre."
          }
        },
        "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 = mantiene lo que había; nulo = limpia; solo vale al 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": "Instituciones donde la persona tiene matrícula (activa o en el historial): siempre todas, incluso con el filtro `instituicaoId`. Puede faltar en servidores más antiguos."
          },
          "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 actividades (de hoy en adelante, en la zona horaria de la institución), con la situación del pedido de asistencia."
          },
          "semPedido": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Actividades de los últimos 30 días que ya pasaron y aún no tienen pedido de asistencia."
          },
          "rejeitadas": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Pedidos rechazados en los últimos 60 días: la persona puede rehacerlos."
          },
          "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` y `realizadas` cuentan todas las actividades (el «X de N» del inicio); `percentual` considera solo las obligatorias."
          },
          "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 grupo. Solo traen valores después de que el grupo las libera; antes, `liberada` es falso y `criterios` viene vacío."
          }
        },
        "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": "Pendientes fuera de la ventana o de la cerca (cola de excepciones)."
          },
          "atividadesHoje": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Actividades de hoy en los grupos que la persona evalúa."
          },
          "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": "Grupos con pedidos esperando, del más lleno al más vacío (hasta 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 escribir: en los grupos que la persona evalúa y cuyo plazo está abierto, alumnos (menos ella misma) sin feedback suyo. Los más urgentes (plazo más cercano) primero, hasta 10 grupos."
          }
        },
        "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": "Asignaturas activas sin ningún criterio activo: nadie puede poner nota en ellas (hasta 5; el total está en `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": "Grupos activos aún no listos para recibir asistencia, por motivo: sin centro (la cerca no tiene referencia), sin actividad de hoy en adelante, sin alumno, o con alumno que aún no aceptó la invitación. Hasta 5 grupos por motivo; el total viene en `total`. Solo grupos y conteos, ningún nombre de persona."
          },
          "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": "Situación de cada grupo activo del ámbito (los mismos contados en `turmas`), por sigla de la asignatura y nombre del grupo, hasta 50 (el total viene en `total`): cuántas actividades hoy y qué pendientes tiene, con las mismas reglas de `pendencias`. `semCriterio`: la asignatura no tiene criterio activo (bloquea la evaluación). Solo ids, siglas y conteos. Puede faltar en servidores más antiguos."
          }
        },
        "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": "Del más antiguo al más nuevo."
          },
          "anteriores": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor para buscar las anteriores; nulo = se llegó al principio."
          },
          "podeEscrever": {
            "type": "boolean"
          },
          "podeModerar": {
            "type": "boolean"
          },
          "alteradas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MensagemDto"
            },
            "description": "Mensajes editados o eliminados desde `alteradasDesde` (para consulta periódica): el cliente reemplaza las que ya tiene."
          },
          "agora": {
            "type": "string",
            "description": "Reloj del servidor en el momento de la lectura (úselo en el 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": "Nombre en el idioma de quien pidió (cae en portugués y luego en cualquier idioma)."
          },
          "nomes": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "enum": [
                "pt-BR",
                "es",
                "en-US"
              ]
            },
            "additionalProperties": {
              "type": "string"
            },
            "description": "Todos los nombres registrados, por idioma (para editar)."
          },
          "descricao": {
            "type": "string",
            "description": "Descripción de cómo evaluar en el idioma de quien pidió (cae en portugués; vacía si no hay)."
          },
          "descricoes": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "enum": [
                "pt-BR",
                "es",
                "en-US"
              ]
            },
            "additionalProperties": {
              "type": "string"
            },
            "description": "Todas las descripciones registradas, por idioma (para editar)."
          },
          "rubrica": {
            "$ref": "#/components/schemas/Rubrica",
            "description": "Rúbrica en el idioma de quien pidió (cae en portugués; vacía si no hay)."
          },
          "rubricas": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "enum": [
                "pt-BR",
                "es",
                "en-US"
              ]
            },
            "additionalProperties": {
              "$ref": "#/components/schemas/Rubrica"
            },
            "description": "Todas las rúbricas registradas, 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": "Es la propia persona que pidió."
          },
          "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 y realizadas solo entre las actividades obligatorias: la base del `percentual`."
          },
          "percentual": {
            "type": [
              "number",
              "null"
            ],
            "description": "Obligatorias confirmadas ÷ obligatorias realizadas, de 0 a 100 con 1 decimal; nulo si aún no hubo actividad obligatoria realizada. La actividad opcional no entra."
          },
          "medias": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaCriterio"
            },
            "description": "Promedio por criterio (asistencias confirmadas en la ventana, sin «no aplica»). Ausente en la fila de la propia persona mientras el grupo no libera las notas. El criterio sin nota no 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": "Actividades no canceladas que ya ocurrieron en la ventana."
          },
          "alunos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EstatisticaAluno"
            },
            "description": "Quien evalúa el grupo ve a todos los alumnos; quien solo es alumno se ve a sí mismo."
          },
          "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": "Criterios que aparecen en los promedios (activos o con nota), en el orden de la asignatura y en el idioma de la persona."
          },
          "notasLiberadas": {
            "type": "boolean",
            "description": "El grupo ya liberó las notas al alumno."
          },
          "mediasTurma": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaCriterio"
            },
            "description": "Promedio del grupo por criterio: solo para quien evalúa el grupo; nunca para el alumno."
          },
          "podeAvaliar": {
            "type": "boolean",
            "description": "Quien pidió evalúa el grupo (puede 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": "Solo en la vista del propio alumno: grupos suyos cuyas notas aún no se liberaron (no entran en las series)."
          }
        },
        "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": "Institución de la asignatura: con cuenta única en varias instituciones, la pantalla filtra por ella. Puede faltar en servidores más antiguos."
          },
          "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 cuando el autor eliminó la cuenta."
          },
          "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": "Autoevaluación del alumno. Solo para quien `verTudo`; nulo para los demás y cuando el alumno no escribió."
          }
        },
        "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 en la confirmación en lote: pendiente y sin excepción (regla calculada en el 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": "Fecha de hoy en la zona horaria de la institución (para resaltar la columna «hoy»)."
          },
          "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": "Actividades en la ventana, por fecha y hora de inicio."
          },
          "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": "Alumnos con matrícula activa, en orden alfabético."
          },
          "truncado": {
            "type": "object",
            "properties": {
              "atividades": {
                "type": "boolean"
              },
              "alunos": {
                "type": "boolean"
              }
            },
            "required": [
              "atividades",
              "alunos"
            ],
            "additionalProperties": false,
            "description": "La lista se cortó en el límite máximo de alumnos y actividades; la cuadrícula y los totales valen solo para lo recibido."
          }
        },
        "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` solo valida y muestra lo que ocurriría; `aplicar` graba todo o nada (a menos que `parcial`)."
          },
          "parcial": {
            "type": "boolean",
            "description": "Modo parcial (con trabas): importa solo las filas válidas y devuelve las ignoradas en la respuesta. `simular` con `parcial` devuelve `hashConteudo`; `aplicar` con `parcial` exige el mismo `hashConteudo` (ausente o distinto = 409 `CONFLICT`). Ausente o `false` = todo o nada."
          },
          "hashConteudo": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$",
            "description": "Hash devuelto por la simulación parcial del mismo contenido (SHA-256 del contenido normalizado, 64 caracteres hexadecimales)."
          }
        },
        "required": [
          "csv",
          "modo"
        ]
      },
      "ImportacaoRelatorio": {
        "type": "object",
        "properties": {
          "tipo": {
            "type": "string",
            "enum": [
              "pessoas",
              "alunos",
              "atividades"
            ]
          },
          "modo": {
            "type": "string",
            "enum": [
              "simular",
              "aplicar"
            ]
          },
          "aplicado": {
            "type": "boolean",
            "description": "En `aplicar`: `true` = grabó; `false` = alguna fila con error, no se grabó nada. En `simular`, siempre `false`."
          },
          "erroArquivo": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "empty",
                  "too_many_lines",
                  "unterminated_quote",
                  "too_large",
                  "missing_column"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Error del archivo en su conjunto (vacío, demasiado grande, falta una columna obligatoria)."
          },
          "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": "Invitaciones que saldrán (cuentas nuevas). `null` = no informado (`simular` no revela si el correo ya tiene cuenta)."
          },
          "parcial": {
            "type": "boolean",
            "description": "Solo en el modo parcial. `true` = el pedido fue parcial."
          },
          "hashConteudo": {
            "type": "string",
            "description": "Solo en `simular` parcial: SHA-256 del contenido normalizado (tipo, destino y filas leídas), que `aplicar` parcial devuelve."
          },
          "contagens": {
            "type": "object",
            "properties": {
              "importadas": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "ignoradas": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "importadas",
              "ignoradas"
            ],
            "additionalProperties": false,
            "description": "Solo en el modo parcial: `importadas` = filas válidas (CRIADA, INCLUIDA, REATIVADA o JA_EXISTE, detalladas en `resumo`); `ignoradas` = filas con ERRO. Importadas + ignoradas = filas leídas. En `simular`, es la previsión."
          },
          "ignoradas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinhaRelatorio"
            },
            "description": "Solo en `aplicar` parcial: las filas que quedaron fuera (fila, campo y motivo). Existe solo en esta respuesta: no se graba."
          }
        },
        "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": "Privacidad (LGPD): `null` borra el valor y vuelve al predeterminado de la 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": "Primer curador de la institución: recibe la invitación por correo."
          }
        },
        "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": "Datos de privacidad de la institución; la API siempre los envía (nulos cuando no se informaron)."
          },
          "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": "Primer día en que se puede escribir (el día del fin del grupo); nulo sin fecha de fin."
          },
          "ate": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Data"
              },
              {
                "type": "null"
              }
            ],
            "description": "Último día en que se puede escribir o ajustar; nulo sin fecha de fin."
          }
        },
        "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": "Lo que identifica la fila para quien importó (el correo, o la fecha y la descripción que venían en el propio archivo)."
          },
          "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": "Solo en la respuesta de crear por correo: el correo ya tenía cuenta y la persona se vinculó a ella."
          }
        },
        "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 cuando el autor eliminó la cuenta."
          },
          "texto": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nulo cuando el mensaje fue eliminado (el texto se borra al eliminarlo)."
          },
          "criadaEm": {
            "type": "string"
          },
          "editadaEm": {
            "type": [
              "string",
              "null"
            ]
          },
          "removida": {
            "type": "boolean"
          },
          "removidaPorModeracao": {
            "type": "boolean",
            "description": "Eliminado por quien modera (y no por el autor)."
          },
          "cursor": {
            "type": "string",
            "description": "Cursor de este mensaje (úselo en `depois` o `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": "Cuándo se hizo el pedido, si lo hubo."
          },
          "avaliadaEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cuándo fue confirmada o rechazada (nulo mientras no se evalúa). Quien evaluó no viene: el alumno no ve nombres del equipo."
          },
          "comentarioAvaliador": {
            "type": [
              "string",
              "null"
            ],
            "description": "Comentario de quien evaluó. Solo llega al propio alumno y a quien evalúa el grupo. Al alumno: el motivo de un rechazo siempre; el de una confirmación solo después de que el grupo libera las notas."
          },
          "relato": {
            "type": [
              "string",
              "null"
            ],
            "description": "El relato de la propia asistencia (el alumno puede reescribirlo). Solo en las filas de la propia persona."
          },
          "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 del envío lo que el servidor exigirá: la ventana del pedido (con las tolerancias del grupo), la zona horaria de la institución (otro día = fecha local distinta) y si la cerca vale (sin ubicación, habrá que justificar). El servidor sigue decidiendo: esto solo evita enviar, recibir error y volver a enviar."
          }
        },
        "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": "Hay una notificación de mensaje no leído en este grupo."
          }
        },
        "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": "Solo ids y nombres de grupo y actividad, para armar el texto y el enlace en el idioma de quien lee. Nunca el texto de un mensaje."
          },
          "turmaNome": {
            "type": [
              "string",
              "null"
            ]
          },
          "instituicaoNome": {
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "description": "Nombre de la institución (solo en el aviso de cuenta eliminada, que no tiene grupo)."
          },
          "atividadeId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "atividadeData": {
            "type": [
              "string",
              "null"
            ],
            "description": "Fecha de la actividad (AAAA-MM-DD), cuando exista."
          },
          "quantidade": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991,
            "description": "Cuántos eventos reúne esta notificación (p. ej.: 3 mensajes nuevos)."
          }
        },
        "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": "Había más filas que el límite."
          },
          "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": "Opciones de los filtros: todo lo que la persona ve, independientemente de los filtros activos."
          }
        },
        "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": "La fila es de la propia persona (como alumna)."
          },
          "podeAvaliar": {
            "type": "boolean",
            "description": "Puede confirmar o rechazar esta asistencia (evalúa el grupo y no es la propia)."
          }
        },
        "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": "Dirección del currículo Lattes (https)."
          },
          "conselhoCodigo": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 60
              },
              {
                "type": "null"
              }
            ],
            "description": "Número en el consejo profesional. Solo la propia persona lo ve."
          },
          "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": "¿Hay foto de perfil? La foto en sí viene de `GET /me/foto`."
          },
          "fotoEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cambia en cada cambio de foto (sirve para renovar la caché del 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": "Solo para quien evalúa el grupo. El alumno ve sus notas en el panel, después de que el grupo las libera."
          },
          "nivelSupervisao": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NivelSupervisao"
              },
              {
                "type": "null"
              }
            ],
            "description": "Nivel de supervisión dado por el último evaluador; nulo = no informado. Solo para quien evalúa (el alumno lo lee en la evaluación, tras la liberación)."
          },
          "relatoEditadoEm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Última edición del relato por el alumno; nulo = nunca editado. Posterior a `avaliadaEm` = editado después de la evaluación."
          },
          "relatoVersoes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Cuántas versiones anteriores del relato existen (quien evalúa las lee en `.../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": "Quien evaluó por última vez: solo en la vista de quien evalúa el grupo, nunca en la del alumno."
          },
          "dentroDaArea": {
            "type": "string",
            "enum": [
              "dentro",
              "fora",
              "sem_localizacao"
            ],
            "description": "Dónde quedó el pedido respecto a la cerca de la actividad, solo la franja (nunca metros): la misma regla que exige justificación. Ausente = la cerca no vale en esta actividad (desactivada o sin centro/radio) o no hay 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": "Hasta 2000 caracteres."
          },
          "justificativa": {
            "type": "string",
            "maxLength": 2000,
            "description": "Obligatoria cuando el pedido cae en excepción."
          },
          "clienteId": {
            "type": "string",
            "format": "uuid",
            "description": "Generado en el aparato: reenviar la cola sin conexión no 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 en que el aparato capturó el pedido (cola sin conexión)."
          },
          "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": "Clave pública VAPID, si el proyecto usa una propia; sin ella el SDK usa la predeterminada de 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": "Validez del token de acceso, en 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 en el inicio de sesión, truncado; puede ser nulo."
          },
          "criadaEm": {
            "type": "string"
          },
          "expiraEm": {
            "type": "string"
          },
          "atual": {
            "type": "boolean",
            "description": "Es la sesión de quien pidió la lista (solo si se informó el token de renovación)."
          }
        },
        "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": "Los 10 ítems de la versión positiva, en orden, 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": "Promedio de la puntuación SUS; nulo sin respuestas."
          },
          "porItem": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Promedio de cada ítem (1–5), en orden; vacía sin respuestas."
          }
        },
        "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": "Tolerancia propia del grupo; `false` = vale el predeterminado."
          },
          "atividadesFuturas": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Actividades no canceladas de hoy en adelante (en la zona horaria de la institución)."
          },
          "alunos": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "alunosComAcesso": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Alumnos que ya aceptaron la invitación (cuenta activa) y pueden registrar asistencia."
          },
          "avaliadores": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Personas con cuenta activa que pueden confirmar asistencia en este grupo, en cualquier nivel (grupo, asignatura, institución)."
          },
          "avaliadoresConvidados": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Personas que podrán evaluar, pero aún no aceptaron la invitación."
          }
        },
        "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": "Tiene vínculo o matrícula en otra institución: solo la plataforma cambia nombre y estado."
          },
          "jaExistia": {
            "type": "boolean",
            "description": "Solo en la respuesta de crear: el correo ya tenía cuenta y la persona se vinculó a ella."
          }
        },
        "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 de la institución, con estadísticas y exportación."
    },
    {
      "name": "Auth",
      "description": "Iniciar, renovar y cerrar sesiones; invitación, primer acceso, cambio y recuperación de contraseña."
    },
    {
      "name": "Contato",
      "description": "Formulario de contacto del sitio, sin inicio de sesión."
    },
    {
      "name": "Disciplinas",
      "description": "Asignaturas de una institución."
    },
    {
      "name": "Catalogo",
      "description": "Elementos del catálogo de actividades profesionales de una asignatura, usados para clasificar las actividades."
    },
    {
      "name": "Criterios",
      "description": "Criterios (y rúbricas) que la asignatura usa para poner notas."
    },
    {
      "name": "Turmas",
      "description": "Grupos de una asignatura: alta, período, equipo auxiliar y preparación."
    },
    {
      "name": "Evolucao",
      "description": "Evolución longitudinal del alumno por asignatura."
    },
    {
      "name": "Perfil",
      "description": "Perfil de la propia persona, foto, conexiones activas, términos y la encuesta de satisfacción de la aplicación."
    },
    {
      "name": "Health",
      "description": "Verificación simple de que la API está en línea."
    },
    {
      "name": "Instituicoes",
      "description": "Instituciones, política de privacidad y términos de uso de cada una."
    },
    {
      "name": "Importacao",
      "description": "Importación en lote de personas, alumnos y actividades, con simulación antes de grabar."
    },
    {
      "name": "Parametros",
      "description": "Parámetros de la plataforma y de la institución, con herencia entre niveles."
    },
    {
      "name": "Usuarios",
      "description": "Personas y roles de una institución: alta, invitación y vínculos."
    },
    {
      "name": "Conta",
      "description": "Eliminación de la propia cuenta, en la aplicación o por la web."
    },
    {
      "name": "Me",
      "description": "Vistas de la propia persona: inicio, panel de actividades y estadísticas de asistencia."
    },
    {
      "name": "PresencaAluno",
      "description": "Lo que hace el alumno: pedir asistencia, editar el relato y generar el QR de la actividad."
    },
    {
      "name": "Conversa",
      "description": "Mensajes entre los participantes de un grupo."
    },
    {
      "name": "Dispositivos",
      "description": "Aparatos que reciben notificaciones push."
    },
    {
      "name": "Notificacoes",
      "description": "Avisos de la persona y sus preferencias por tipo."
    },
    {
      "name": "Autoavaliacao",
      "description": "Autoevaluación final del alumno en un grupo."
    },
    {
      "name": "Avaliacao",
      "description": "Notas y evaluación de una matrícula, vistas por el equipo o por el propio alumno."
    },
    {
      "name": "Feedback",
      "description": "Feedback de cierre que el equipo escribe para cada alumno."
    },
    {
      "name": "PresencaAvaliador",
      "description": "Lo que hace quien evalúa: cola de pedidos, confirmar o rechazar, lote, lectura de QR y versiones del relato."
    },
    {
      "name": "PoliticaPublica",
      "description": "Página pública de la política de privacidad de una institución, sin inicio de sesión."
    },
    {
      "name": "PushWeb",
      "description": "Configuración pública para recibir notificaciones push en el navegador."
    },
    {
      "name": "Atividades",
      "description": "Calendario de actividades de un grupo (clases, guardias, prácticas)."
    },
    {
      "name": "EstatisticasTurma",
      "description": "Estadísticas de asistencia y notas de un grupo, con exportación."
    },
    {
      "name": "Frequencia",
      "description": "Matriz de asistencia de un grupo (alumnos × actividades)."
    },
    {
      "name": "Matriculas",
      "description": "Alumnos matriculados en un grupo."
    }
  ]
}