{
  "openapi": "3.0.0",
  "info": {
    "description": "API de integração da Expedit Lawtech. Permite criar e consultar compromissos e prazos da agenda jurídica de forma programática. Autentique enviando sua chave de API no header X-API-Key; os dados são sempre restritos automaticamente ao seu escritório.",
    "version": "2.0.0",
    "title": "Expedit Lawtech — API de Integração",
    "contact": {
      "name": "Expedit Lawtech",
      "url": "https://www.expedit.com.br/",
      "email": "francisco@expedit.com.br"
    }
  },
  "tags": [
    {
      "name": "Agenda",
      "description": "Agenda Comentarios Controller"
    },
    {
      "name": "Arquivos",
      "description": "Consulta de arquivos vinculados a entidades do sistema"
    },
    {
      "name": "Campos Personalizados",
      "description": "Campo Personalizado Controller"
    },
    {
      "name": "Checklists",
      "description": "Checklist Template Controller"
    },
    {
      "name": "Equipes",
      "description": "Equipes Controller"
    },
    {
      "name": "Feriados",
      "description": "Feriado Controller"
    },
    {
      "name": "Grupos de Empresas",
      "description": "Grupos Empresas Controller"
    },
    {
      "name": "Indicações",
      "description": "Indicacoes Controller"
    },
    {
      "name": "Pessoas",
      "description": "Tipos Pessoa Controller"
    },
    {
      "name": "Processos",
      "description": "Fases Processo Controller"
    },
    {
      "name": "Processos - Expedientes",
      "description": "Expedientes exibidos na ficha do processo"
    },
    {
      "name": "Processos - Pedidos",
      "description": "Pedidos Processo Controller"
    },
    {
      "name": "Processos - Tipos de pedido",
      "description": "Tipos Pedido Controller"
    },
    {
      "name": "Publicações",
      "description": "Consulta e tratamento de publicações processuais"
    },
    {
      "name": "Tipos de Evento",
      "description": "Tipo Evento Controller"
    },
    {
      "name": "Usuários",
      "description": "Usuarios Controller"
    },
    {
      "name": "Webhooks",
      "description": "Configure URLs que receberão eventos da Expedit."
    },
    {
      "name": "agenda-arquivos-controller",
      "description": "Agenda Arquivos Controller"
    }
  ],
  "paths": {
    "/v2/agenda": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Criar atividade na agenda",
        "description": "<div>\n<h3>Criar atividade na agenda</h3>\n<p>Cria uma atividade (compromisso ou prazo) na agenda do seu escritório.</p>\n<p><b>Identidade:</b> o escritório e o usuário criador são resolvidos automaticamente a partir da sua chave de API &mdash; não vão no corpo.</p>\n<p><b>Obrigatórios:</b> apenas <code>titulo</code>, <code>tipoEventoId</code> e <code>periodo</code>. Todo o resto é opcional.</p>\n<p><b>IDs de vínculo</b> (tipo de evento, responsáveis, equipes, processo, pessoa, checklists) são obtidos antes nas rotas <code>/v2/{recurso}/opcoes</code>.</p>\n<p><b>Recursos automáticos:</b></p>\n<ul>\n<li><b>Recorrência</b> &mdash; informe <code>recorrencia</code> e a atividade é replicada em N ocorrências.</li>\n<li><b>Revisores e checklists</b> &mdash; podem ser herdados do tipo de evento / fluxo, somados aos informados manualmente.</li>\n<li><b>Herdar do processo</b> &mdash; com um <code>processoId</code>, use <code>herdarDoProcesso</code> para copiar as equipes/responsáveis já vinculados ao processo, sem re-listar.</li>\n</ul>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"5\" align=\"center\" bgcolor=\"#d7e3fc\">CAMPOS DO CORPO &mdash; CriarAgendaRequest</th></tr><tr><th align=\"left\" width=\"14%\">Campo</th><th align=\"left\" width=\"16%\">Validação</th><th align=\"left\" width=\"32%\">Descrição</th><th align=\"left\" width=\"18%\">Exemplo</th><th align=\"left\" width=\"20%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>titulo</b></td><td valign=\"middle\">@NotBlank</td><td valign=\"middle\">Título/assunto da atividade, exibido na agenda.</td><td valign=\"middle\">Contestação - Processo X</td><td valign=\"middle\">Obrigatório; não pode ser vazio.</td></tr>\n<tr><td valign=\"middle\"><b>tipoEventoId</b></td><td valign=\"middle\">@NotNull</td><td valign=\"middle\">Tipo do compromisso (ex.: Audiência, Prazo, Reunião). Id de <code>/v2/tipos-evento/opcoes</code>.</td><td valign=\"middle\">12</td><td valign=\"middle\">Obrigatório.</td></tr>\n<tr><td valign=\"middle\"><b>prioridade</b></td><td valign=\"middle\">enum</td><td valign=\"middle\">Prioridade para destaque visual na agenda.</td><td valign=\"middle\">MEDIA</td><td valign=\"middle\">Opcional. Um de: SEM_PRIORIDADE, BAIXA, MEDIA, ALTA (default SEM_PRIORIDADE).</td></tr>\n<tr><td valign=\"middle\"><b>periodo</b></td><td valign=\"middle\">@NotNull @Valid</td><td valign=\"middle\">Datas e horas do prazo (ver tabela <i>periodo</i> abaixo).</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Obrigatório.</td></tr>\n<tr><td valign=\"middle\"><b>observacao</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Texto livre com detalhes adicionais.</td><td valign=\"middle\">Prazo em dobro (Fazenda Pública).</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>responsaveisIds</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Usuários responsáveis por executar a atividade. Ids de <code>/v2/usuarios/opcoes</code>.</td><td valign=\"middle\">[10, 11]</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>equipesIds</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Equipes responsáveis (todos os membros passam a acompanhar). Ids de <code>/v2/equipes/opcoes</code>.</td><td valign=\"middle\">[5]</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>processoId</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Processo judicial ao qual a atividade se refere. Id de <code>/v2/processos/opcoes</code>.</td><td valign=\"middle\">999</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>pessoasIds</b></td><td valign=\"middle\">@Size(max 1)</td><td valign=\"middle\">Cliente(s)/pessoa(s) vinculada(s). Ids de <code>/v2/pessoas/opcoes</code>.</td><td valign=\"middle\">[123]</td><td valign=\"middle\">Opcional. Array por compatibilidade futura; <b>hoje aceita no máximo 1</b> (mais de um &rarr; 400).</td></tr>\n<tr><td valign=\"middle\"><b>herdarDoProcesso</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Copia para a atividade as equipes e/ou responsáveis já vinculados ao processo (ver tabela <i>herdarDoProcesso</i>).</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional. <b>Exige processoId.</b> É somado (união, sem duplicar) ao que vier em responsaveisIds/equipesIds.</td></tr>\n<tr><td valign=\"middle\"><b>documentos</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Links de documentos no SharePoint (ver tabela <i>documentos</i>).</td><td valign=\"middle\">[ {...} ]</td><td valign=\"middle\">Opcional. Só a URL, sem upload de arquivo.</td></tr>\n<tr><td valign=\"middle\"><b>revisores</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Revisores adicionais informados manualmente (<code>{ manualIds: [...] }</code>).</td><td valign=\"middle\">{ \"manualIds\": [20] }</td><td valign=\"middle\">Opcional. Revisores por tipo/fluxo já entram automaticamente.</td></tr>\n<tr><td valign=\"middle\"><b>recorrencia</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Repete a atividade em várias ocorrências (ver tabela <i>recorrencia</i>).</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>checklistTemplateIds</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Modelos de checklist a clonar na atividade. Ids de <code>/v2/checklists/opcoes</code>.</td><td valign=\"middle\">[7, 9]</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>concluido</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Cria a atividade já concluída.</td><td valign=\"middle\">false</td><td valign=\"middle\">Opcional (default false). Grava só a flag — não dispara efeitos de conclusão (revisão/notificação); a <code>situacao</code> segue \"pendente\".</td></tr>\n</tbody>\n</table>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"5\" align=\"center\" bgcolor=\"#d7f0d7\">periodo &mdash; objeto obrigatório</th></tr><tr><th align=\"left\" width=\"14%\">Campo</th><th align=\"left\" width=\"16%\">Validação</th><th align=\"left\" width=\"32%\">Descrição</th><th align=\"left\" width=\"18%\">Exemplo</th><th align=\"left\" width=\"20%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>inicio</b></td><td valign=\"middle\">@NotNull</td><td valign=\"middle\">Data de início da atividade/prazo.</td><td valign=\"middle\">2026-07-10</td><td valign=\"middle\">Obrigatório.</td></tr>\n<tr><td valign=\"middle\"><b>fim</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Data de fim.</td><td valign=\"middle\">2026-07-12</td><td valign=\"middle\">Opcional. Se omitida, assume <code>inicio</code>.</td></tr>\n<tr><td valign=\"middle\"><b>horaInicio</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Hora de início.</td><td valign=\"middle\">09:00</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>horaFim</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Hora de fim.</td><td valign=\"middle\">10:00</td><td valign=\"middle\">Opcional.</td></tr>\n</tbody>\n</table>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"5\" align=\"center\" bgcolor=\"#fdf0d0\">recorrencia &mdash; objeto opcional</th></tr><tr><th align=\"left\" width=\"14%\">Campo</th><th align=\"left\" width=\"16%\">Validação</th><th align=\"left\" width=\"32%\">Descrição</th><th align=\"left\" width=\"18%\">Exemplo</th><th align=\"left\" width=\"20%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>tipo</b></td><td valign=\"middle\">@NotNull</td><td valign=\"middle\">Frequência da repetição.</td><td valign=\"middle\">MENSAL</td><td valign=\"middle\">Obrigatório. Um de: SEMANAL, MENSAL.</td></tr>\n<tr><td valign=\"middle\"><b>quantidade</b></td><td valign=\"middle\">@NotNull @Min(1) @Max(200)</td><td valign=\"middle\">Número de ocorrências geradas.</td><td valign=\"middle\">3</td><td valign=\"middle\">Obrigatório. Entre 1 e 200.</td></tr>\n</tbody>\n</table>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"5\" align=\"center\" bgcolor=\"#f3ddf3\">documentos[] &mdash; opcional</th></tr><tr><th align=\"left\" width=\"14%\">Campo</th><th align=\"left\" width=\"16%\">Validação</th><th align=\"left\" width=\"32%\">Descrição</th><th align=\"left\" width=\"18%\">Exemplo</th><th align=\"left\" width=\"20%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>url</b></td><td valign=\"middle\">@NotBlank</td><td valign=\"middle\">URL do documento no SharePoint.</td><td valign=\"middle\">https://sharepoint.com/...</td><td valign=\"middle\">Obrigatório.</td></tr>\n<tr><td valign=\"middle\"><b>rotulo</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Rótulo exibido para o link.</td><td valign=\"middle\">Petição inicial</td><td valign=\"middle\">Opcional.</td></tr>\n</tbody>\n</table>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"5\" align=\"center\" bgcolor=\"#d0eef0\">herdarDoProcesso &mdash; objeto opcional (exige processoId)</th></tr><tr><th align=\"left\" width=\"14%\">Campo</th><th align=\"left\" width=\"16%\">Validação</th><th align=\"left\" width=\"32%\">Descrição</th><th align=\"left\" width=\"18%\">Exemplo</th><th align=\"left\" width=\"20%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>equipes</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Copia as equipes já vinculadas ao processo para a atividade.</td><td valign=\"middle\">true</td><td valign=\"middle\">Opcional (default false). Une com equipesIds; duplicatas ignoradas.</td></tr>\n<tr><td valign=\"middle\"><b>responsaveis</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Copia os responsáveis já vinculados ao processo para a atividade.</td><td valign=\"middle\">true</td><td valign=\"middle\">Opcional (default false). Une com responsaveisIds; duplicatas ignoradas.</td></tr>\n</tbody>\n</table>\n</div>\n",
        "operationId": "criarUsingPOST_1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarAgendaRequest"
              }
            }
          },
          "description": "Dados da atividade a criar (ver tabela de campos na descrição).",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Atividade criada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CriarAgendaResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 863210,\n  \"titulo\": \"Contestação - Processo X\",\n  \"tipoEventoId\": 12,\n  \"prioridade\": \"MEDIA\",\n  \"responsaveisIds\": [10, 11],\n  \"equipesIds\": [5],\n  \"processoId\": 999,\n  \"pessoasIds\": [123],\n  \"revisores\": [ { \"userId\": 20, \"tipo\": \"MANUAL\" } ],\n  \"documentos\": [ { \"url\": \"https://sharepoint.com/...\", \"rotulo\": \"Petição inicial\" } ],\n  \"atividadesGeradas\": [],\n  \"ocorrencias\": [],\n  \"checklists\": []\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "500": {
            "description": "Erro interno no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/consulta": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Listar agenda.",
        "description": "Grade do calendário — compromissos/expedientes/audiências/diligências combinados. Filtros no corpo, paginação por query param.",
        "operationId": "consultarUsingPOST",
        "parameters": [
          {
            "name": "pagina",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "Itens por página; use 0 para retornar toda a janela da agenda",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiltrosAgendaRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Página de itens da agenda.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_AgendaItemResponse_"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/itens/{tipo}/{id}": {
      "get": {
        "tags": [
          "Agenda"
        ],
        "summary": "Buscar item da agenda para visualização.",
        "description": "Retorna o mesmo shape da listagem completa para COMPROMISSO, EXPEDIENTE, AUDIENCIA ou DILIGENCIA.",
        "operationId": "buscarItemDaListagemUsingGET",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tipo",
            "in": "path",
            "description": "tipo",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgendaItemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/itens/{tipo}/{id}/visualizacoes": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Registrar visualização de item da agenda.",
        "description": "Faz upsert em ws_visualizacao somente se o item estiver visível ao usuário autenticado.",
        "operationId": "registrarVisualizacaoItemUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tipo",
            "in": "path",
            "description": "tipo",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/processos/{processoId}/compromissos": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Listar compromissos de um processo.",
        "description": "Reaproveita a consulta de compromissos da agenda; não inclui expedientes, audiências ou diligências.",
        "operationId": "consultarCompromissosDoProcessoUsingPOST",
        "parameters": [
          {
            "name": "pagina",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "ID do processo.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "Itens por página (máx. 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiltrosAgendaRequest"
              }
            }
          },
          "description": "request"
        },
        "responses": {
          "200": {
            "description": "Página de compromissos do processo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_AgendaItemResponse_"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{agendaId}/arquivos/{arquivoId}": {
      "delete": {
        "tags": [
          "agenda-arquivos-controller"
        ],
        "summary": "excluir",
        "operationId": "excluirUsingDELETE",
        "parameters": [
          {
            "name": "agendaId",
            "in": "path",
            "description": "agendaId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "arquivoId",
            "in": "path",
            "description": "arquivoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{agendaId}/auditoria": {
      "get": {
        "tags": [
          "Agenda"
        ],
        "summary": "Listar auditoria de uma atividade.",
        "description": "Retorna somente mutações confirmadas da atividade solicitada. A visibilidade é a mesma da Agenda: responsabilidade, equipe, privacidade e herança são reaplicadas. Não inclui payload, metadata, IP ou sessão.",
        "operationId": "listarUsingGET",
        "parameters": [
          {
            "name": "agendaId",
            "in": "path",
            "description": "agendaId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "description": "pagina",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "tamanho",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página da auditoria retornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventoTimelineAgendaResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado."
          },
          "403": {
            "description": "Sem permissão para visualizar Agenda."
          },
          "404": {
            "description": "Atividade não visível ou inexistente no escritório autenticado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{agendaId}/auditoria/{eventoId}": {
      "get": {
        "tags": [
          "Agenda"
        ],
        "summary": "Detalhar evento da auditoria de uma atividade.",
        "description": "Abre alterações e vínculos históricos do evento, sem dados técnicos crus. Campos sensíveis permanecem sem valor. Criações com evidência congelada trazem origem e totais gerados. Evento de outra atividade ou tenant responde como não encontrado.",
        "operationId": "detalharUsingGET",
        "parameters": [
          {
            "name": "agendaId",
            "in": "path",
            "description": "agendaId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "eventoId",
            "in": "path",
            "description": "eventoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Detalhe do evento retornado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetalheEventoTimelineAgendaResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado."
          },
          "403": {
            "description": "Sem permissão para visualizar Agenda."
          },
          "404": {
            "description": "Atividade ou evento não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{agendaId}/comentarios": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Criar comentário de uma atividade de agenda",
        "description": "O título e a data são definidos pelo servidor. Anexos devem já pertencer à atividade. O vínculo com processo só ocorre quando vincularAoProcesso for verdadeiro.",
        "operationId": "criarUsingPOST",
        "parameters": [
          {
            "name": "agendaId",
            "in": "path",
            "description": "agendaId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarComentarioAgendaRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComentarioAgendaResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}": {
      "get": {
        "tags": [
          "Agenda"
        ],
        "summary": "Buscar atividade por id.",
        "description": "Retorna a atividade completa (com fluxos/vínculos) se pertencer ao cliente autenticado e não estiver excluída.",
        "operationId": "buscarPorIdUsingGET",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Atividade encontrada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgendaResponseDTO"
                }
              }
            }
          },
          "400": {
            "description": "Atividade não encontrada para o cliente autenticado, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "Agenda"
        ],
        "summary": "Atualizar atividade.",
        "description": "Substitui cabeçalho, responsáveis/equipes (full-replace) e sincroniza revisor/checklist por diff. O tipo de tarefa pode mudar, mas não recria fluxo nem recorrências existentes. Quando um campo operacional do contrato externo mudar, produz o webhook `agenda.compromisso.atualizado` para endpoints inscritos.",
        "operationId": "atualizarUsingPUT",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarAgendaRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Atividade atualizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgendaResponseDTO"
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido ou atividade não encontrada, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Agenda"
        ],
        "summary": "Excluir atividade.",
        "description": "Soft-delete escopado pelo cliente autenticado.",
        "operationId": "excluirUsingDELETE_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Atividade excluída.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Atividade não encontrada para o cliente autenticado, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}/cancelar": {
      "put": {
        "tags": [
          "Agenda"
        ],
        "summary": "Cancelar atividade.",
        "description": "Registra um histórico de status 'cancelado'. Idempotente.",
        "operationId": "cancelarUsingPUT",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelarAgendaRequest"
              }
            }
          },
          "description": "request"
        },
        "responses": {
          "200": {
            "description": "Cancelada (ou já estava cancelada).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Atividade não encontrada, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}/concluir": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Concluir atividade da agenda",
        "description": "Marca como concluída uma atividade pertencente ao escritório autenticado.\n\nA operação é idempotente: concluir novamente uma atividade já concluída mantém o\nestado e não gera um novo evento `agenda.compromisso.concluido`.\n\nNesta versão, a operação altera somente o estado de conclusão, registra auditoria\ne publica o webhook. Validações e efeitos adicionais do fluxo legado, como\nchecklist, dependências, lembretes, revisão e notificações, ainda não fazem parte\ndeste contrato.\n\nO corpo é opcional.\n",
        "operationId": "concluirUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ConcluirAgendaRequest"
        },
        "responses": {
          "200": {
            "description": "Atividade concluída.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConcluirAgendaResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 876007,\n  \"concluido\": true\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Atividade inválida ou não encontrada para o cliente autenticado, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "403": {
            "description": "Sem permissão para concluir atividades."
          },
          "500": {
            "description": "Erro interno no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}/desfazer-cancelamento": {
      "put": {
        "tags": [
          "Agenda"
        ],
        "summary": "Desfazer cancelamento.",
        "description": "Restaura o status anterior ao cancelamento (ou PENDENTE como último recurso).",
        "operationId": "desfazerCancelamentoUsingPUT",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesfazerCancelamentoAgendaRequest"
              }
            }
          },
          "description": "request"
        },
        "responses": {
          "200": {
            "description": "Desfeito (ou não estava cancelada).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Atividade não encontrada ou status anterior não identificado, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}/desfazer-conclusao": {
      "post": {
        "tags": [
          "Agenda"
        ],
        "summary": "Desfazer conclusão de atividade da agenda",
        "description": "Reabre (marca como não concluída) uma atividade pertencente ao escritório autenticado.\n\nA operação é idempotente: desfazer a conclusão de uma atividade já aberta mantém o\nestado.\n\nNesta versão, a operação altera somente o estado de conclusão e registra auditoria —\nnão publica webhook nem dispara efeitos adicionais do fluxo legado.\n\nO corpo é opcional.\n",
        "operationId": "desfazerConclusaoUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ConcluirAgendaRequest"
        },
        "responses": {
          "200": {
            "description": "Conclusão desfeita.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConcluirAgendaResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 876007,\n  \"concluido\": false\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Atividade inválida ou não encontrada para o cliente autenticado, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "403": {
            "description": "Sem permissão para desfazer conclusão de atividades."
          },
          "500": {
            "description": "Erro interno no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}/fluxo": {
      "delete": {
        "tags": [
          "Agenda"
        ],
        "summary": "Excluir atividade e cadeia de fluxo.",
        "description": "Soft-delete da atividade e de todas as filhas vinculadas (ws_agenda.agenda_id).",
        "operationId": "excluirComFluxoUsingDELETE",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Atividade e cadeia de fluxo excluídas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Atividade não encontrada para o cliente autenticado, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/agenda/{id}/mover": {
      "put": {
        "tags": [
          "Agenda"
        ],
        "summary": "Mover data.",
        "description": "Move a data do principal e recalcula a data dos compromissos do fluxo informados em compromissosDoFluxoIds a partir da config atual (SUM/SUBTRACT, dias úteis/corridos).",
        "operationId": "moverUsingPUT",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da atividade de agenda (principal).",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoverAgendaRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Data(s) movida(s).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido ou atividade não encontrada, no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/arquivos": {
      "get": {
        "tags": [
          "Arquivos"
        ],
        "summary": "Listar arquivos filtrando por processo_id, agenda_id ou ambos.",
        "operationId": "listarUsingGET_1",
        "parameters": [
          {
            "name": "agenda_id",
            "in": "query",
            "description": "agenda_id",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "listaClientes",
            "in": "query",
            "description": "listaClientes",
            "required": false,
            "schema": {
              "type": "string",
              "default": "0"
            }
          },
          {
            "name": "processo_id",
            "in": "query",
            "description": "processo_id",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ListaArquivosResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/arquivos/links-temporarios": {
      "post": {
        "tags": [
          "Arquivos"
        ],
        "summary": "Gerar URLs S3 temporárias, em lote, para arquivos autorizados do processo ou agenda.",
        "operationId": "gerarLinksTemporariosUsingPOST",
        "parameters": [
          {
            "name": "agenda_id",
            "in": "query",
            "description": "agenda_id",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "listaClientes",
            "in": "query",
            "description": "listaClientes",
            "required": false,
            "schema": {
              "type": "string",
              "default": "0"
            }
          },
          {
            "name": "processo_id",
            "in": "query",
            "description": "processo_id",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinksTemporariosArquivosRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/LinksTemporariosArquivosResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/campos-personalizados": {
      "get": {
        "tags": [
          "Campos Personalizados"
        ],
        "summary": "Listar campos personalizados (paginado)",
        "description": "<div>\n<h3>Listar campos personalizados</h3>\n<p>Listagem <b>administrativa</b> das definições do escritório (tela de gerenciamento), com filtro por nome e paginação.</p>\n<p><b>Para montar formulários de cadastro</b> (pessoa/processo), prefira <code>GET /v2/campos-personalizados/opcoes?type=…</code> &mdash; resposta enxuta e focada no que o front precisa.</p>\n<p><b>Escopo:</b> o escritório vem do token — a listagem traz apenas os campos do seu escritório.</p>\n</div>\n",
        "operationId": "listarUsingGET_2",
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "description": "Filtro por nome (contém, case-insensitive)",
            "required": false,
            "example": "Origem",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "example": 1,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "Itens por página",
            "required": false,
            "example": 15,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de campos personalizados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedItemsDTO_CampoPersonalizadoResponseDTO_"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Campos Personalizados"
        ],
        "summary": "Criar campo personalizado",
        "description": "<div>\n<h3>Criar campo personalizado</h3>\n<p>Define um novo campo extra para <b>pessoa</b> ou <b>processo</b>. O escritório vem sempre do token autenticado.</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th align=\"left\">Campo</th><th align=\"left\">Obrigatório</th><th align=\"left\">Descrição</th></tr></thead>\n<tbody>\n<tr><td><code>nome</code></td><td>Sim</td><td>Rótulo normalizado (sem espaços externos), único no escritório. Máx. 255.</td></tr>\n<tr><td><code>tipo</code></td><td>Sim</td><td><code>PESSOA</code> ou <code>PROCESSO</code>.</td></tr>\n<tr><td><code>tipoEntrada</code></td><td>Sim</td><td>Widget (ver legenda abaixo).</td></tr>\n<tr><td><code>mascara</code></td><td>Não</td><td>Formatação (default <code>NORMAL</code>).</td></tr>\n<tr><td><code>opcoes</code></td><td>Não</td><td>Lista de valores usada por <code>SELECAO</code>, <code>ESCOLHA_UNICA</code> e <code>MULTIPLA_ESCOLHA</code>; pode ser vazia e é ignorada nos demais widgets.</td></tr>\n</tbody>\n</table>\n<p><b>tipoEntrada</b> (widget que captura o valor):</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th align=\"left\">Valor</th><th align=\"left\">Widget</th><th align=\"left\">Usa opções?</th></tr></thead>\n<tbody>\n<tr><td><code>TEXTO</code></td><td>Campo de texto curto</td><td>Não</td></tr>\n<tr><td><code>NUMERO</code></td><td>Número</td><td>Não</td></tr>\n<tr><td><code>DATA</code></td><td>Data</td><td>Não</td></tr>\n<tr><td><code>TEXTO_LONGO</code></td><td>Área de texto</td><td>Não</td></tr>\n<tr><td><code>SELECAO</code></td><td>Lista suspensa (1 valor)</td><td>Sim</td></tr>\n<tr><td><code>ESCOLHA_UNICA</code></td><td>Rádio (1 valor)</td><td>Sim</td></tr>\n<tr><td><code>MULTIPLA_ESCOLHA</code></td><td>Checkbox (vários valores)</td><td>Sim</td></tr>\n</tbody>\n</table>\n<p><b>mascara</b> (formatação sugerida): <code>NORMAL</code>, <code>TELEFONE</code>, <code>CPF</code>, <code>CNPJ</code>, <code>EMAIL</code>, <code>LINK</code>, <code>CEP</code>, <code>VALOR</code>.</p>\n<p><b>tipo</b> (a que entidade o campo se aplica): <code>PESSOA</code> ou <code>PROCESSO</code>.</p>\n</div>\n",
        "operationId": "criarUsingPOST_2",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCampoPersonalizadoRequestDTO"
              }
            }
          },
          "description": "Definição a criar (ver campos na descrição).",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Campo criado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CampoPersonalizadoResponseDTO"
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (nome duplicado ou tipo/tipoEntrada ausente)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/campos-personalizados/opcoes": {
      "get": {
        "tags": [
          "Campos Personalizados"
        ],
        "summary": "Opções de campos personalizados (para formulários)",
        "description": "<div>\n<h3>Opções de campos personalizados</h3>\n<p>Lista <b>enxuta</b> das definições ativas do seu escritório, para o front <b>montar o formulário</b> de cadastro/edição. Filtre pela entidade com <code>type</code>.</p>\n<p><b>Parâmetro:</b> <code>type=PESSOA</code> ou <code>type=PROCESSO</code> (maiúsculas). Escopo do escritório vem do token.</p>\n<p><b>Cada item traz:</b> <code>id</code> (é este que vai depois em <code>camposPersonalizados[].campoId</code>), <code>nome</code>, <code>tipoEntrada</code>, <code>mascara</code> e <code>opcoes</code> (preenchido só para seleção/escolha única/múltipla escolha).</p>\n<p><b>Exemplo:</b> <code>[ { \"id\": 12, \"nome\": \"Origem\", \"tipoEntrada\": \"TEXTO\", \"mascara\": \"NORMAL\", \"opcoes\": [] }, { \"id\": 21, \"nome\": \"Canais\", \"tipoEntrada\": \"MULTIPLA_ESCOLHA\", \"mascara\": \"NORMAL\", \"opcoes\": [\"A\",\"B\",\"C\"] } ]</code></p>\n<p><b>tipoEntrada</b> (widget que captura o valor):</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th align=\"left\">Valor</th><th align=\"left\">Widget</th><th align=\"left\">Usa opções?</th></tr></thead>\n<tbody>\n<tr><td><code>TEXTO</code></td><td>Campo de texto curto</td><td>Não</td></tr>\n<tr><td><code>NUMERO</code></td><td>Número</td><td>Não</td></tr>\n<tr><td><code>DATA</code></td><td>Data</td><td>Não</td></tr>\n<tr><td><code>TEXTO_LONGO</code></td><td>Área de texto</td><td>Não</td></tr>\n<tr><td><code>SELECAO</code></td><td>Lista suspensa (1 valor)</td><td>Sim</td></tr>\n<tr><td><code>ESCOLHA_UNICA</code></td><td>Rádio (1 valor)</td><td>Sim</td></tr>\n<tr><td><code>MULTIPLA_ESCOLHA</code></td><td>Checkbox (vários valores)</td><td>Sim</td></tr>\n</tbody>\n</table>\n<p><b>mascara</b> (formatação sugerida): <code>NORMAL</code>, <code>TELEFONE</code>, <code>CPF</code>, <code>CNPJ</code>, <code>EMAIL</code>, <code>LINK</code>, <code>CEP</code>, <code>VALOR</code>.</p>\n<p><b>tipo</b> (a que entidade o campo se aplica): <code>PESSOA</code> ou <code>PROCESSO</code>.</p>\n</div>\n",
        "operationId": "listarOpcoesUsingGET",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Entidade dos campos: PESSOA ou PROCESSO (maiúsculas).",
            "required": true,
            "example": "PESSOA",
            "schema": {
              "type": "string",
              "enum": [
                "PESSOA",
                "PROCESSO"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de opções de campos do tipo pedido.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OpcaoCampoPersonalizadoResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro 'type' ausente ou inválido (use PESSOA ou PROCESSO)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/campos-personalizados/{id}": {
      "get": {
        "tags": [
          "Campos Personalizados"
        ],
        "summary": "Detalhar campo personalizado",
        "description": "<div>\n<h3>Detalhar campo personalizado</h3>\n<p>Retorna a definição completa pelo <code>id</code>, no escopo do escritório autenticado (404 se não for do escritório).</p>\n</div>\n",
        "operationId": "buscarPorIdUsingGET_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da definição",
            "required": true,
            "example": 12,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Definição encontrada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CampoPersonalizadoResponseDTO"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Campo não encontrado no escritório autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "Campos Personalizados"
        ],
        "summary": "Atualizar campo personalizado",
        "description": "<div>\n<h3>Atualizar campo personalizado</h3>\n<p><b>Substitui</b> a definição (mesmos campos do cadastro). O id vem do path; o escritório vem do token.</p>\n<p>As mesmas regras de <code>opcoes</code> por <code>tipoEntrada</code> valem aqui.</p>\n</div>\n",
        "operationId": "atualizarUsingPUT_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da definição a atualizar",
            "required": true,
            "example": 12,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCampoPersonalizadoRequestDTO"
              }
            }
          },
          "description": "Estado final da definição (mesmos campos do cadastro).",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Campo atualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CampoPersonalizadoResponseDTO"
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Campo não encontrado no escritório autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Campos Personalizados"
        ],
        "summary": "Excluir campo personalizado (soft-delete)",
        "description": "<div>\n<h3>Excluir campo personalizado</h3>\n<p><b>Soft-delete</b> (<code>deleted=1</code>): some das listagens e das opções, mas o registro é preservado. Valores já gravados em pessoas/processos não são apagados.</p>\n</div>\n",
        "operationId": "excluirUsingDELETE_2",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da definição a excluir",
            "required": true,
            "example": 12,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Campo excluído (soft-delete).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Campo não encontrado no escritório autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/checklists/opcoes": {
      "get": {
        "tags": [
          "Checklists"
        ],
        "summary": "Listar templates de checklist (AGENDA) do cliente para seleção.",
        "operationId": "listarUsingGET_3",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (nome do checklist)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChecklistTemplateResumoResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/equipes/opcoes": {
      "get": {
        "tags": [
          "Equipes"
        ],
        "summary": "Buscar equipes do cliente (paginado) para seleção.",
        "operationId": "buscarUsingGET",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máx 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (nome da equipe)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_EquipeResumoResponse_"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/feriados": {
      "get": {
        "tags": [
          "Feriados"
        ],
        "summary": "Listar feriados nacionais dentro de um intervalo de datas (inclusive).",
        "operationId": "listarUsingGET_5",
        "parameters": [
          {
            "name": "dataFim",
            "in": "query",
            "description": "Data final (inclusive)",
            "required": true,
            "example": "2026-12-31",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataInicio",
            "in": "query",
            "description": "Data inicial (inclusive)",
            "required": true,
            "example": "2026-01-01",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FeriadoResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/grupos-empresas/opcoes": {
      "get": {
        "tags": [
          "Grupos de Empresas"
        ],
        "summary": "Buscar grupos de empresas do cliente (paginado) para seleção.",
        "description": "Retorna itens `{ id, nome }` paginados, para escolher o `grupoEmpresasId` usado em `Complementos` no `POST /v2/pessoas`.",
        "operationId": "buscarUsingGET_1",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máx 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (título do grupo)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_GrupoEmpresasResponse_"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/indicacoes/opcoes": {
      "get": {
        "tags": [
          "Indicações"
        ],
        "summary": "Buscar indicações do cliente (paginado) para seleção.",
        "description": "Retorna itens `{ id, nome }` paginados, para escolher o `indicacaoId` usado em `Complementos` no `POST /v2/pessoas`.",
        "operationId": "buscarUsingGET_2",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máx 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (nome da indicação)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_IndicacaoResponse_"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Criar pessoa (cliente/parte/advogado)",
        "description": "<div>\n<h3>Criar pessoa</h3>\n<p>Cria uma pessoa (cliente, parte contrária, advogado, colaborador etc.) vinculada ao seu escritório.</p>\n<p><b>Identidade:</b> o escritório e o usuário criador são resolvidos automaticamente a partir da sua chave de API &mdash; não vão no corpo.</p>\n<p><b>Obrigatório:</b> apenas <code>nome</code>. Todo o resto é opcional.</p>\n<p><b>Escopo atual:</b> dados próprios da pessoa, representante legal, controle de acesso (responsáveis/equipes) e campos personalizados.</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"5\" align=\"center\" bgcolor=\"#d7e3fc\">CAMPOS DO CORPO &mdash; CriarPessoaRequest</th></tr><tr><th align=\"left\" width=\"14%\">Campo</th><th align=\"left\" width=\"16%\">Validação</th><th align=\"left\" width=\"32%\">Descrição</th><th align=\"left\" width=\"18%\">Exemplo</th><th align=\"left\" width=\"20%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>nome</b></td><td valign=\"middle\">@NotBlank</td><td valign=\"middle\">Nome da pessoa.</td><td valign=\"middle\">João da Silva</td><td valign=\"middle\">Obrigatório; máx. 255 caracteres.</td></tr>\n<tr><td valign=\"middle\"><b>apelido</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Apelido / nome curto.</td><td valign=\"middle\">João</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>classificacao</b></td><td valign=\"middle\">enum</td><td valign=\"middle\">Papel da pessoa.</td><td valign=\"middle\">CLIENTE</td><td valign=\"middle\">Opcional (default CLIENTE). Um de: CLIENTE, PARTE_CONTRARIA, ADVOGADO, COLABORADOR, OUTRO, CORRESPONDENTE, ADVOGADO_CONTRARIO, TESTEMUNHA.</td></tr>\n<tr><td valign=\"middle\"><b>naturezaPessoa</b></td><td valign=\"middle\">enum</td><td valign=\"middle\">Física ou jurídica.</td><td valign=\"middle\">FISICA</td><td valign=\"middle\">Opcional. Um de: FISICA, JURIDICA. Sem regra condicional no v1.</td></tr>\n<tr><td valign=\"middle\"><b>cpfCnpj</b></td><td valign=\"middle\">CPF/CNPJ válido</td><td valign=\"middle\">Documento (com ou sem máscara).</td><td valign=\"middle\">000.000.000-00</td><td valign=\"middle\">Opcional. Se informado, precisa ser válido e não duplicado para o cliente.</td></tr>\n<tr><td valign=\"middle\"><b>oab</b></td><td valign=\"middle\">-</td><td valign=\"middle\">Número da OAB.</td><td valign=\"middle\">123456/SP</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>avatarUrl</b></td><td valign=\"middle\">http(s)</td><td valign=\"middle\">URL da foto — link, sem upload.</td><td valign=\"middle\">https://exemplo.com/foto.jpg</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>contatos</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Telefones, e-mail, redes sociais.</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>documentos</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Dados pessoais/documentais (RG, nascimento, estado civil etc.).</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>endereco</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Endereço.</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>complementos</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Valor/hora, indicação, grupo de empresas, observações.</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>representante</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Representante legal (nome, documento, RG, nascimento, endereço).</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional. Se informado, <code>representante.nome</code> é obrigatório (máx. 100 caracteres).</td></tr>\n<tr><td valign=\"middle\"><b>controleAcesso</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Responsáveis e equipes que podem acessar/gerenciar o cadastro.</td><td valign=\"middle\">{ objeto }</td><td valign=\"middle\">Opcional. <code>responsaveisIds</code> precisam ser usuários ativos do cliente; <code>equipesIds</code> precisam existir no cliente — inválidos &rarr; 400.</td></tr>\n<tr><td valign=\"middle\"><b>camposPersonalizados</b></td><td valign=\"middle\">@Valid</td><td valign=\"middle\">Valores dos campos personalizados do escritório (definições com <code>type=pessoa</code>).</td><td valign=\"middle\">[ { \"campoId\": 12, \"valores\": [\"João\"] } ]</td><td valign=\"middle\">Opcional. Referência por <code>campoId</code>; campo inexistente/de outro escritório/de tipo <code>processo</code> &rarr; 400.</td></tr>\n</tbody>\n</table>\n<p><b>Como enviar campos personalizados:</b> cada item referencia a definição por <code>campoId</code> (liste os campos do escritório em <code>GET /v2/campos-personalizados/opcoes?type=PESSOA</code>) e traz <code>valores</code> <b>sempre como lista</b>, mesmo quando é um valor só.</p>\n<p><b>Valor único</b> (texto, número, data, seleção, escolha única, texto longo) &rarr; lista de 1 item: <code>{ \"campoId\": 12, \"valores\": [\"João da Silva\"] }</code>.</p>\n<p><b>Múltipla escolha</b> (checkbox) &rarr; vários itens: <code>{ \"campoId\": 21, \"valores\": [\"Opção A\", \"Opção C\"] }</code>.</p>\n<p>Exemplo do bloco: <code>\"camposPersonalizados\": [ { \"campoId\": 12, \"valores\": [\"João da Silva\"] }, { \"campoId\": 21, \"valores\": [\"Opção A\", \"Opção C\"] } ]</code>.</p>\n<p>O <code>campoId</code> precisa existir, ser do seu escritório e do tipo <code>pessoa</code> &mdash; senão a criação inteira é rejeitada com <code>400</code>.</p>\n</div>\n",
        "operationId": "criarUsingPOST_4",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarPessoaRequest"
              }
            }
          },
          "description": "Dados da pessoa a criar (ver tabela de campos na descrição).",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Pessoa criada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CriarPessoaResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 863210,\n  \"nome\": \"João da Silva\",\n  \"classificacao\": \"CLIENTE\",\n  \"naturezaPessoa\": null,\n  \"cpfCnpj\": \"00000000000\",\n  \"contatos\": {},\n  \"documentos\": {},\n  \"endereco\": {},\n  \"complementos\": {},\n  \"camposPersonalizados\": [\n    { \"campoId\": 12, \"valores\": [\"João da Silva\"] },\n    { \"campoId\": 21, \"valores\": [\"Opção A\", \"Opção C\"] }\n  ]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (erro de validação)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/arquivar": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Arquivar pessoas (em lote)",
        "description": "<div>\n<h3>Arquivar pessoas</h3>\n<p>Arquiva uma ou mais pessoas do seu escritório: elas <b>somem das listagens ativas</b> mas continuam na base (histórico/auditoria) — diferente de excluir.</p>\n<p><b>Identidade:</b> o escritório vem da sua chave de API — só os ids vão no corpo.</p>\n<p><b>Em lote:</b> mande <code>{ \"ids\": [123, 124] }</code>. Arquivar uma só é uma lista de 1.</p>\n<p><b>Best-effort:</b> a resposta separa <code>arquivados</code> de <code>ignorados</code> (não encontrados, de outro escritório, ou já excluídos). Reversível via <code>/desarquivar</code>.</p>\n<p><b>Processos (opcional):</b> envie <code>{ \"processos\": { \"removerMonitoramento\": true, \"encerrar\": true } }</code>. As opções são independentes: <code>removerMonitoramento</code> desativa somente processos ativos, monitorados e vinculados exclusivamente à pessoa arquivada; <code>encerrar</code> encerra somente processos ativos sob a mesma regra. Processos compartilhados são preservados e retornam no relatório.</p>\n</div>\n",
        "operationId": "arquivarUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArquivarPessoasRequest"
              }
            }
          },
          "description": "IDs das pessoas a arquivar.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lote processado (ver arquivados/ignorados).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArquivarPessoasResponse"
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (lista vazia, mais de 1000 ids, nulo ou não positivo)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/atualizacoes-em-lote": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Atualizar tipo e grupo de pessoas em lote",
        "description": "Atualiza somente os campos informados. `grupoEmpresasId=0` remove o grupo; tipoId precisa ser ativo e grupo precisa pertencer ao escritório. O retorno é best-effort.",
        "operationId": "atualizarEmLoteUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarPessoasEmLoteRequest"
              }
            }
          },
          "description": "IDs e alterações de tipo/grupo.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lote processado (ver atualizadas/ignorados).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AtualizarPessoasEmLoteResponse"
                }
              }
            }
          },
          "400": {
            "description": "Payload, tipo ou grupo inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/bootstrap-partes": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Cadastrar partes de processos como pessoas",
        "description": "Cria até 80 pessoas. A classificação e o grupo são validados no escritório autenticado; uma falha de nome não cancela os demais cadastros.",
        "operationId": "bootstrapPartesUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BootstrapPessoasPartesRequest"
              }
            }
          },
          "description": "Nomes das partes e configuração inicial do cadastro.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lote processado, com itens criados e falhas individuais.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BootstrapPessoasPartesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Payload, classificação ou grupo inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/desarquivar": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Desarquivar pessoas (em lote)",
        "description": "<div>\n<h3>Desarquivar pessoas</h3>\n<p>Reverte o arquivamento: as pessoas voltam a ser <b>ativas</b> e reaparecem nas listagens.</p>\n<p><b>Identidade:</b> o escritório vem da sua chave de API — só os ids vão no corpo.</p>\n<p><b>Best-effort:</b> a resposta separa <code>desarquivados</code> de <code>ignorados</code>.</p>\n<p><b>Processos (opcional):</b> envie <code>{ \"processos\": { \"reativarMonitoramento\": true, \"reabrir\": true } }</code>. As opções são independentes: <code>reativarMonitoramento</code> reativa processos vinculados até a capacidade disponível no plano; <code>reabrir</code> reabre todos os processos vinculados que estejam encerrados, inclusive compartilhados. Processos acima do limite ou já no estado desejado retornam no relatório.</p>\n</div>\n",
        "operationId": "desarquivarUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesarquivarPessoasRequest"
              }
            }
          },
          "description": "IDs das pessoas a desarquivar.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lote processado (ver desarquivados/ignorados).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DesarquivarPessoasResponse"
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (lista vazia, mais de 1000 ids, nulo ou não positivo)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/exclusoes": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Excluir pessoas (em lote)",
        "description": "<div>\n<h3>Excluir pessoas</h3>\n<p>Exclui uma ou mais pessoas do seu escritório (<b>soft-delete</b>: some das listagens, mas o registro é preservado).</p>\n<p><b>Identidade:</b> o escritório vem da sua chave de API — só os ids vão no corpo.</p>\n<p><b>Em lote:</b> mande <code>{ \"ids\": [123, 124] }</code>. Excluir uma só é uma lista de 1; máximo de 1000 ids.</p>\n<p><b>Best-effort:</b> a resposta separa <code>excluidos</code> (soft-deletados agora) de <code>ignorados</code> (não encontrados, de outro escritório, ou já excluídos). Um id inválido no meio NÃO derruba os demais.</p>\n</div>\n",
        "operationId": "excluirEmLoteUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExcluirPessoasRequest"
              }
            }
          },
          "description": "IDs das pessoas a excluir.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lote processado (ver excluidos/ignorados).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExcluirPessoasResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"solicitados\": 3,\n  \"excluidos\": [123, 124],\n  \"ignorados\": [\n    {\n      \"id\": 999,\n      \"motivo\": \"Pessoa não encontrada, já excluída ou fora do cliente autenticado.\"\n    }\n  ]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (lista vazia, mais de 1000 ids, nulo ou não positivo)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/opcoes": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Buscar pessoas do cliente (paginado) para seleção.",
        "description": "Retorna itens `{ id, nome, documento }` paginados, para escolher o `pessoaId` usado em outras rotas (ex.: `POST /v2/agenda`). Sem `q`, lista todas as pessoas do cliente autenticado.",
        "operationId": "buscarUsingGET_3",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máx 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (nome)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "situacao",
            "in": "query",
            "description": "Situação: ATIVO (default), ARQUIVADO ou TODOS",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ARQUIVADO",
                "ATIVO",
                "TODOS"
              ],
              "default": "ATIVO"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_PessoaResponse_"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/relacionamentos-em-lote": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Alterar marcadores, equipes ou responsáveis em lote",
        "description": "A ação é idempotente: adicionar reativa ou mantém o vínculo e remover mantém a remoção. Alvos inválidos, inativos ou de outro escritório devolvem 400; pessoas inválidas são ignoradas no relatório.",
        "operationId": "alterarRelacionamentosEmLoteUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelacionamentoPessoasEmLoteRequest"
              }
            }
          },
          "description": "Pessoas, alvo, ação e IDs a relacionar.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lote processado (ver pessoasProcessadas/ignorados).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelacionamentoPessoasEmLoteResponse"
                }
              }
            }
          },
          "400": {
            "description": "Payload ou alvo inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/selecoes": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Resolver seleção total de pessoas",
        "description": "Aplica filtros no servidor e retorna no máximo 1000 IDs.",
        "operationId": "selecionarEmLoteUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SelecionarPessoasEmLoteRequest"
              }
            }
          },
          "description": "request"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SelecionarPessoasEmLoteResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/tipos": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Listar tipos de pessoa visíveis ao escritório.",
        "description": "Retorna os tipos globais mais os do escritório autenticado, globais primeiro e depois por nome — a ordem em que a UI agrupa \"Tipos padrão\" / \"Tipos do escritório\".",
        "operationId": "listarUsingGET_12",
        "parameters": [
          {
            "name": "apenasAtivos",
            "in": "query",
            "description": "Esconde os desativados (default `true`).",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TipoPessoaResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Criar um tipo do escritório.",
        "description": "O tipo nasce ativo e no escopo do escritório autenticado — não há como criar global. O nome não pode repetir outro tipo visível, **incluindo os globais**.",
        "operationId": "criarUsingPOST_6",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarTipoPessoaRequest"
              }
            }
          },
          "description": "Nome do novo tipo.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tipo criado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TipoPessoaResponse"
                }
              }
            }
          },
          "400": {
            "description": "Nome vazio, longo demais ou já usado por um tipo visível."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/tipos/{id}": {
      "delete": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Desativar um tipo do escritório.",
        "description": "Desativa, não apaga: quem já está classificado com o tipo continua exibindo-o, e ele só some das novas seleções. Idempotente. Para reverter, use `PATCH` com `ativo: true`.",
        "operationId": "desativarUsingDELETE",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do tipo.",
            "required": true,
            "example": 12,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "204": {
            "description": "Tipo desativado (ou já estava)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Tipo inexistente, de outro escritório, ou global (somente leitura)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Renomear e/ou reativar um tipo do escritório.",
        "description": "Campos independentes: omitir um mantém o valor atual. `ativo: true` traz de volta um tipo desativado — sem isso o nome dele ficaria bloqueado para sempre pelo índice único.",
        "operationId": "atualizarUsingPATCH",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do tipo.",
            "required": true,
            "example": 12,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarTipoPessoaRequest"
              }
            }
          },
          "description": "Campos a alterar.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tipo atualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TipoPessoaResponse"
                }
              }
            }
          },
          "400": {
            "description": "Nenhum campo informado, ou nome inválido/repetido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Tipo inexistente, de outro escritório, ou global (somente leitura)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/vinculos/tipos": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Listar os tipos de vínculo entre pessoas.",
        "description": "Retorna os tipos ativos, agrupados por categoria e depois por nome. Cada item traz os rótulos dos dois lados — a mesma linha diz \"Pai/Mãe\" na ficha de um e \"Filho(a)\" na do outro. Use `simetrica` para saber se o modal precisa perguntar a direção: quando for `false`, `papelPessoaAtual` é obrigatório ao criar o vínculo.",
        "operationId": "listarUsingGET_13",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TipoVinculoResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/{id}": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Consultar pessoa para edição",
        "description": "<div>\n<h3>Consultar pessoa para edição</h3>\n<p>Retorna o estado completo <b>editável</b> da pessoa: dados principais, contatos, documentos,\nendereço, complementos, representante, responsáveis, equipes e campos personalizados.</p>\n<p>O escritório é resolvido pelo token. Pessoa inexistente, excluída ou de outro escritório retorna\n<code>404</code>.</p>\n<p>Esta rota não retorna auditoria, dados internos de ownership ou histórico. Use a resposta para\npreencher o modal e, quando disponível, enviá-la ao endpoint de edição.</p>\n</div>\n",
        "operationId": "buscarPorIdUsingGET_2",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 863210,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Pessoa encontrada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PessoaDetalheResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 863210,\n  \"nome\": \"João da Silva\",\n  \"apelido\": \"João\",\n  \"classificacao\": \"CLIENTE\",\n  \"naturezaPessoa\": \"FISICA\",\n  \"cpfCnpj\": \"00000000000\",\n  \"oab\": null,\n  \"avatarUrl\": null,\n  \"contatos\": { \"telefonePrincipal\": \"81999990000\", \"email\": \"joao@exemplo.com\" },\n  \"documentos\": { \"dataNascimento\": \"1990-05-20\" },\n  \"endereco\": { \"cidade\": \"Recife\", \"estado\": \"PE\" },\n  \"complementos\": { \"valorHora\": 250.00 },\n  \"representante\": null,\n  \"controleAcesso\": { \"responsaveisIds\": [1649], \"equipesIds\": [406] },\n  \"camposPersonalizados\": [\n    { \"campoId\": 12, \"valores\": [\"João da Silva\"] },\n    { \"campoId\": 21, \"valores\": [\"Opção A\", \"Opção C\"] }\n  ]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "ID inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Pessoa não encontrada."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Atualizar pessoa",
        "description": "<div>\n<h3>Atualizar pessoa</h3>\n<p>Substitui integralmente o estado <b>editável</b> da pessoa: dados principais, contatos,\ndocumentos, endereço, complementos, representante, responsáveis, equipes e campos personalizados.</p>\n<p><b>Limpeza explícita:</b> campo ou bloco opcional com <code>null</code> limpa seu valor;\n<code>representante: null</code> remove o representante; listas vazias removem todos os vínculos\ndaquele bloco. Por isso, envie o estado completo carregado por <code>GET /v2/pessoas/{id}</code>.</p>\n<p>Exemplo de limpeza de representante e vínculos: <code>{ \"nome\": \"João da Silva\",\n\"classificacao\": \"CLIENTE\", \"representante\": null, \"controleAcesso\": {\n\"responsaveisIds\": [], \"equipesIds\": [] }, \"camposPersonalizados\": [] }</code>.</p>\n<p>A rota não altera a situação de arquivamento. Pessoas arquivadas também podem ser editadas.\nO escritório e o usuário atualizador vêm do token, nunca do corpo.</p>\n</div>\n",
        "operationId": "atualizarUsingPUT_3",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 863210,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarPessoaRequest"
              }
            }
          },
          "description": "Estado completo editavel da pessoa.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Pessoa atualizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PessoaDetalheResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 863210,\n  \"nome\": \"João da Silva\",\n  \"apelido\": \"João\",\n  \"classificacao\": \"CLIENTE\",\n  \"naturezaPessoa\": \"FISICA\",\n  \"cpfCnpj\": \"00000000000\",\n  \"oab\": null,\n  \"avatarUrl\": null,\n  \"contatos\": { \"telefonePrincipal\": \"81999990000\", \"email\": \"joao@exemplo.com\" },\n  \"documentos\": { \"dataNascimento\": \"1990-05-20\" },\n  \"endereco\": { \"cidade\": \"Recife\", \"estado\": \"PE\" },\n  \"complementos\": { \"valorHora\": 250.00 },\n  \"representante\": null,\n  \"controleAcesso\": { \"responsaveisIds\": [1649], \"equipesIds\": [406] },\n  \"camposPersonalizados\": [\n    { \"campoId\": 12, \"valores\": [\"João da Silva\"] },\n    { \"campoId\": 21, \"valores\": [\"Opção A\", \"Opção C\"] }\n  ]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload ou ID invalido."
          },
          "401": {
            "description": "Nao autenticado (token ausente/invalido)."
          },
          "404": {
            "description": "Pessoa nao encontrada."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/{id}/ficha": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Consultar a ficha da pessoa",
        "description": "<div>\n<h3>Ficha da pessoa</h3>\n<p>Devolve, numa chamada, tudo que a ficha exibe: identificação, tipo já resolvido por nome,\nresponsáveis e equipes <b>com nome</b>, documentos, endereço, contatos, observações, campos\npersonalizados com rótulo, e os contadores do topo.</p>\n<p><b>É a rota de leitura; para editar, use <code>GET /v2/pessoas/{id}</code></b>, que devolve o\nestado editável. As duas existem porque servem telas opostas: o formulário quer ids crus (o\n<code>select</code> já tem os nomes), a ficha quer rótulo em tudo e não quer o resto.</p>\n<p><code>pessoaJuridica</code> (inscrição estadual, ramo, responsável) vem <code>null</code>\nquando os três estão vazios &mdash; na prática, pessoa física. A condição é o conteúdo, e não\n<code>natureza</code>, porque no legado existe cadastro de empresa com esses campos preenchidos e a\nnatureza em branco; escondê-los seria perder dado que a ficha atual mostra.</p>\n<p>Não existe aqui o campo legado <code>classificacao</code>: use <code>tipoNome</code> para exibir\ne <code>tipoId</code> para identificar.</p>\n<p><code>responsaveis</code> e <code>equipes</code> listam apenas os que ainda existem no\nescritório: vínculo apontando para usuário ou equipe removida não tem nome para exibir e fica de\nfora. O <code>GET /v2/pessoas/{id}</code> continua devolvendo o id cru desses vínculos, para o\nformulário de edição não apagá-los ao salvar.</p>\n<p>O escritório vem do token. Pessoa inexistente, excluída, de outro escritório ou com id não\npositivo devolve <code>404</code>.</p>\n</div>\n",
        "operationId": "buscarFichaUsingGET",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 337155,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ficha da pessoa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FichaPessoaResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 337155,\n  \"nome\": \"João da Silva\",\n  \"apelido\": \"João\",\n  \"avatarUrl\": null,\n  \"tipoId\": 1,\n  \"tipoNome\": \"Cliente\",\n  \"natureza\": \"FISICA\",\n  \"cpfCnpj\": \"000.000.000-00\",\n  \"responsaveis\": [{ \"id\": 1649, \"nome\": \"Ana Paula Ferreira\" }],\n  \"equipes\": [{ \"id\": 406, \"nome\": \"Cível\" }],\n  \"documentos\": {\n    \"rg\": \"1234567\",\n    \"orgaoEmissorRg\": \"SDS/PE\",\n    \"sexo\": \"Masculino\",\n    \"naturalidade\": \"Recife\",\n    \"dataNascimento\": \"1985-04-12\",\n    \"nomeMae\": \"Maria da Silva\",\n    \"nomePai\": \"José da Silva\",\n    \"estadoCivil\": \"Solteiro(a)\",\n    \"profissao\": \"Engenheiro\"\n  },\n  \"pessoaJuridica\": null,\n  \"endereco\": {\n    \"cep\": \"50000-000\",\n    \"logradouro\": \"Rua da Aurora\",\n    \"numero\": \"100\",\n    \"bairro\": \"Boa Vista\",\n    \"cidade\": \"Recife\",\n    \"estado\": \"PE\",\n    \"complemento\": null\n  },\n  \"contatos\": {\n    \"telefonePrincipal\": \"(81) 99999-9999\",\n    \"telefoneSecundario\": null,\n    \"telefone03\": null,\n    \"telefone04\": null,\n    \"email\": \"joao@exemplo.com\",\n    \"site\": null\n  },\n  \"observacoes\": { \"texto\": null, \"tentativasContato\": null },\n  \"camposPersonalizados\": [\n    { \"campoId\": 100, \"nome\": \"Origem\", \"tipoEntrada\": \"select\", \"valores\": [\"Indicação\"] }\n  ],\n  \"contadores\": { \"processos\": 12, \"audiencias\": 3 }\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "ID não numérico (falha de conversão do path)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Pessoa não encontrada — inclui excluída, id não positivo e pessoa de outro escritório."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/{id}/link-processos": {
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Gerar link temporário de processos para uma pessoa",
        "description": "O link expira ao final de dois dias. O token retornado é uma credencial temporária: não o registre em logs ou auditorias.",
        "operationId": "gerarLinkProcessosUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 337155,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Link temporário emitido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GerarLinkProcessosPessoaResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Pessoa não encontrada ou fora do cliente autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/{id}/processos": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Listar processos vinculados à pessoa (paginado)",
        "description": "<div>\n<h3>Processos vinculados à pessoa</h3>\n<p>Lista os processos em que a pessoa aparece, <b>em qualquer papel</b>. O escritório vem da\nsua chave de API; apenas processos não excluídos do seu escritório entram.</p>\n<p><b>Uma linha por processo.</b> Os papéis vêm na lista <code>vinculadoComo</code>, porque a\nmesma pessoa pode ocupar mais de um no mesmo processo — o caso comum é o advogado que também\né parte. Valores possíveis: <code>CLIENTE</code> (parte representada pelo escritório),\n<code>PARTE_CONTRA</code>, <code>ADVOGADO</code>, <code>ADVOGADO_CONTRA</code>.</p>\n<p>É o mesmo vocabulário que <code>POST /v2/processos/pessoas</code> aceita no campo\n<code>tipo</code>, então o valor lido aqui pode ser reenviado na escrita sem tradução.</p>\n<p><b>Tribunal:</b> <code>tribunal</code> vem sempre preenchido — todo processo aponta para\numa linha de <code>tribunais</code>, inclusive quando não há tribunal de fato: nesses casos\nvem <code>Sem Tribunal</code>, ou <code>Processo Administrativo</code> no administrativo.\nJá <code>grau</code> pode vir nulo, porque não é toda linha de <code>tribunais</code> que o\ndefine &mdash; o administrativo é um desses casos.</p>\n<p>Pessoa inexistente, excluída, de outro escritório ou com id não positivo devolve\n<code>404</code> — mesma regra do <code>GET /v2/pessoas/{id}</code>. Lista vazia com\n<code>200</code> significa, e só significa, que a pessoa existe e não tem processo\nvinculado.</p>\n<p>Pessoa <b>arquivada</b> é listada normalmente: arquivar não esconde a pessoa desta rota.</p>\n</div>\n",
        "operationId": "listarProcessosUsingGET",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 863210,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máx 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de processos vinculados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProcessoVinculadoResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"content\": [\n    {\n      \"processoId\": 26540878,\n      \"numeroProcesso\": \"1011214-58.2024.8.26.0477\",\n      \"tribunal\": \"TJSP\",\n      \"grau\": \"1º Grau\",\n      \"encerrado\": false,\n      \"monitorado\": true,\n      \"vinculadoComo\": [\"CLIENTE\", \"ADVOGADO\"]\n    }\n  ],\n  \"page\": 1,\n  \"perPage\": 15,\n  \"total\": 1,\n  \"totalPages\": 1\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "ID não numérico (falha de conversão do path)."
          },
          "401": {
            "description": "Token inválido."
          },
          "403": {
            "description": "Acesso negado, inclusive chamada sem token."
          },
          "404": {
            "description": "Pessoa não encontrada — inclui id zero ou negativo."
          },
          "503": {
            "description": "Banco indisponível ou consulta excedeu o tempo limite.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/{id}/vinculos": {
      "get": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Listar os relacionamentos de uma pessoa.",
        "description": "Cada item traz **a outra** pessoa e como ela se chama no vínculo: na ficha do pai sai `Maria — Filho(a)`, e na da filha, `Pedro — Pai/Mãe`. Agrupado por categoria e nome.",
        "operationId": "listarUsingGET_14",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 10,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Relacionamentos da pessoa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VinculoPessoaResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Pessoa não encontrada neste escritório."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Vincular esta pessoa a outra.",
        "description": "Grava **uma** linha, que passa a aparecer nas duas fichas. Em tipo direcional (`simetrica: false`) o `papelPessoaAtual` é obrigatório: sem ele não há como saber quem é o pai. Em simétrico, cadastrar pela ficha de qualquer um dos dois dá o mesmo vínculo — a segunda tentativa é `409`.",
        "operationId": "criarUsingPOST_7",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa cuja ficha está aberta.",
            "required": true,
            "example": 10,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarVinculoPessoaRequest"
              }
            }
          },
          "description": "Dados do vínculo.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Vínculo criado ou reativado."
          },
          "400": {
            "description": "Auto-vínculo, período invertido, tipo inválido, `papelPessoaAtual` ausente em tipo direcional, ou pessoa relacionada fora do escritório."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Pessoa da URL não encontrada neste escritório."
          },
          "409": {
            "description": "`vinculo_ja_existe` — a relação já está cadastrada; ou `vinculo_inverso_existente` — o sentido contrário já existe num tipo que não admite os dois."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/pessoas/{id}/vinculos/{vinculoId}": {
      "delete": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Remover um vínculo.",
        "description": "Some das duas fichas. A relação pode ser cadastrada de novo depois — o cadastro reaproveita o registro removido em vez de recusar por duplicidade.",
        "operationId": "removerUsingDELETE",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 10,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "vinculoId",
            "in": "path",
            "description": "ID do vínculo.",
            "required": true,
            "example": 44,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "204": {
            "description": "Vínculo removido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Vínculo inexistente, já removido, ou de outro escritório."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Pessoas"
        ],
        "summary": "Editar período e observação de um vínculo.",
        "description": "Só isso é editável. Trocar tipo ou pessoas seria outro vínculo — remova e crie, para passar pelas validações de simetria e de sentido contrário. Substituição integral: campo omitido é limpo.",
        "operationId": "atualizarUsingPATCH_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID da pessoa.",
            "required": true,
            "example": 10,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "vinculoId",
            "in": "path",
            "description": "ID do vínculo.",
            "required": true,
            "example": 44,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarVinculoPessoaRequest"
              }
            }
          },
          "description": "Período e observação.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "204": {
            "description": "Vínculo atualizado."
          },
          "400": {
            "description": "Data de fim anterior à de início."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Vínculo inexistente, removido, ou de outro escritório."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Listar processos do escritório",
        "description": "<div>\n<h3>Listar processos</h3>\n<p>Devolve a página de processos do <b>seu escritório</b>. É a coleção do recurso — diferente de\n<code>GET /v2/processos/opcoes</code>, que existe só para preencher um campo de seleção.</p>\n<p><b>Campos:</b> os mesmos da rota de seleção (<code>id</code>, <code>numero</code>,\n<code>tribunal</code>, <code>grau</code>, <code>partes</code>) mais <code>encerrado</code> e\n<code>monitoramentoAtivo</code> &mdash; a captura automática do tribunal. Os dois estados\nsão <b>independentes</b>: um processo pode estar encerrado e monitorado ao mesmo tempo.\n<code>monitoramentoAtivo</code> é o mesmo nome aceito no cadastro/edição, então o valor lido\naqui pode ser reenviado sem tradução.</p>\n<p>Cada um dos dois tem o filtro de mesmo nome — o que a listagem devolve é exatamente o que\no filtro seleciona.</p>\n<p><b>Tribunal:</b> <code>tribunal</code> vem sempre preenchido — todo processo aponta para uma\nlinha de <code>tribunais</code>, inclusive quando não há tribunal de fato: nesses casos vem\n<code>Sem Tribunal</code>, ou <code>Processo Administrativo</code> no administrativo.\n<code>grau</code> pode vir nulo, porque não é toda linha de <code>tribunais</code> que o define\n&mdash; o administrativo é um desses casos.</p>\n<p><b>Nulos:</b> <code>partes</code> vem nulo em processo que nunca foi capturado.</p>\n<p><b>Ordenação:</b> por número do processo, crescente.</p>\n<p><b>Escopo:</b> só processos não excluídos do escritório do token.</p>\n<h4>Filtros</h4>\n<p><b>Omitir um filtro não filtra por ele</b> — nenhum tem valor padrão que restrinja o\nresultado. Sem nenhum parâmetro, a rota devolve todos os processos do escritório. Se a tela\nabre pré-filtrada por ativos, é ela que envia <code>encerrado=false</code>.</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th align=\"left\" width=\"26%\">Filtro</th><th align=\"left\" width=\"74%\">Efeito</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><code>q</code></td><td>Barra de pesquisa &mdash; casa pelo\n<b>começo</b> do número do processo. Vazio ou omitido, não filtra.</td></tr>\n<tr><td valign=\"middle\"><code>encerrado</code></td><td><code>true</code> só encerrados;\n<code>false</code> só não encerrados; omitido, os dois.</td></tr>\n<tr><td valign=\"middle\"><code>monitoramentoAtivo</code></td><td><code>true</code> só com captura\nautomática ligada; <code>false</code> só desligada; omitido, os dois.</td></tr>\n<tr><td valign=\"middle\"><code>cpfCnpjCliente</code></td><td>CPF/CNPJ exato, com ou sem máscara,\nda pessoa vinculada ao processo como cliente.</td></tr>\n</tbody>\n</table>\n<p><b>Filtros combinam por E.</b> <code>?encerrado=true&amp;monitoramentoAtivo=true</code> devolve\nos processos que são encerrados <b>e</b> monitorados — são eixos independentes, não opções de\numa mesma lista. A busca entra na mesma conjunção:\n<code>?q=2024&amp;encerrado=false</code> procura \"2024\" <b>dentro</b> dos não encerrados.</p>\n<h4>Sobre a busca (<code>q</code>)</h4>\n<p><b>Casa pelo começo do número, não por trecho no meio.</b> <code>1011214</code> acha o processo\n<code>1011214-58.2024.8.26.0477</code>; <code>0477</code> (o final) e <code>2024</code> (o ano, no\nmeio) <b>não</b> acham nada. É uma escolha deliberada: buscar por trecho arbitrário impede o uso de\níndice e fazia esta listagem levar dez segundos num escritório grande.</p>\n<p><b>A máscara é indiferente.</b> <code>1011214-58.2024</code> e <code>1011214582024</code> acham o\nmesmo processo. O número pode estar gravado com ou sem máscara — as duas formas são procuradas.</p>\n<p><b>Hoje procura só no número do processo.</b> O parâmetro é uma barra de pesquisa, não um filtro\npor número: conforme a tela evoluir ele passará a procurar também em outros campos (partes, pasta,\nnúmero interno). Se você precisa de correspondência exata e estável por um campo específico,\nnão use <code>q</code> &mdash; ele é melhor-esforço por definição.</p>\n</div>\n",
        "operationId": "listarUsingGET_8",
        "parameters": [
          {
            "name": "cpfCnpjCliente",
            "in": "query",
            "description": "CPF ou CNPJ exato da pessoa vinculada como cliente, com ou sem máscara. Combina com os demais filtros.",
            "required": false,
            "example": "12.345.678/0001-95",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "encerrado",
            "in": "query",
            "description": "Só encerrados (true) ou só não encerrados (false). Omitir não filtra.",
            "required": false,
            "example": "false",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "monitoramentoAtivo",
            "in": "query",
            "description": "Só monitorados (true) ou só não monitorados (false). Omitir não filtra. Combina livremente com encerrado.",
            "required": false,
            "example": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Página, começando em 1.",
            "required": false,
            "example": 1,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máximo 100 — valores acima são reduzidos ao teto, sem erro).",
            "required": false,
            "example": 15,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Barra de pesquisa: casa pelo começo do número do processo, com ou sem máscara (não busca trecho do meio). Omitir ou enviar vazio não filtra.",
            "required": false,
            "example": "1011214",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de processos do escritório.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_ProcessoListagemResponse_"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"content\": [\n    {\n      \"id\": 45210,\n      \"numero\": \"0001234-96.2026.8.17.0001\",\n      \"tribunal\": \"TJPE\",\n      \"grau\": \"1º Grau\",\n      \"partes\": \"ACME LTDA x João da Silva\",\n      \"encerrado\": false,\n      \"monitoramentoAtivo\": true\n    }\n  ],\n  \"page\": 1,\n  \"perPage\": 15,\n  \"total\": 1,\n  \"totalPages\": 1\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "CPF/CNPJ do cliente inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Processos"
        ],
        "summary": "Cadastrar processo",
        "description": "<div>\n<h3>Cadastrar processo</h3>\n<p>Cria um processo vinculado ao seu escritório.</p>\n<p><b>Identidade:</b> o escritório é resolvido a partir da sua chave de API &mdash; não vai no corpo. Em <code>partes.clientes[].clienteId</code> vão as <b>pessoas</b> (partes do processo), não o escritório.</p>\n<p><b>Seções do corpo:</b> <code>dadosBasicos</code> (obrigatório), <code>detalhesComplementares</code>, <code>camposPersonalizados</code>, <code>partes</code> e <code>controleAcesso</code>.</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"4\" align=\"center\" bgcolor=\"#d7e3fc\">dadosBasicos</th></tr><tr><th align=\"left\" width=\"22%\">Campo</th><th align=\"left\" width=\"18%\">Validação</th><th align=\"left\" width=\"34%\">Descrição</th><th align=\"left\" width=\"26%\">Regras</th></tr></thead>\n<tbody>\n<tr><td valign=\"middle\"><b>tribunalId</b></td><td>@NotNull @Positive</td><td>Tribunal. O tipo (judicial/administrativo) é resolvido na UI: judicial usa o tribunal escolhido; administrativo usa o id do tribunal administrativo.</td><td>Obrigatório.</td></tr>\n<tr><td valign=\"middle\"><b>numeroProcesso</b></td><td>@NotBlank</td><td>Número do processo. Validado conforme <code>formatoNumero</code>.</td><td>Obrigatório. Em <code>CNJ</code>: <code>NNNNNNN-DD.AAAA.J.TR.OOOO</code> (20 dígitos, com ou sem máscara; o dígito verificador <b>não</b> é conferido). Em <code>OUTRO</code>: texto livre.</td></tr>\n<tr><td valign=\"middle\"><b>formatoNumero</b></td><td>enum</td><td>Como o número deve ser lido/validado.</td><td>Opcional (default <code>CNJ</code>). Use <code>OUTRO</code> para numeração própria — administrativo, STF/STJ e tribunais fora do padrão CNJ.</td></tr>\n<tr><td valign=\"middle\"><b>classeJudicial</b></td><td>texto livre</td><td>Classe judicial (rótulo, ex.: \"Procedimento Comum Cível\"). Não é id de catálogo.</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>numeroInterno</b></td><td>-</td><td>Número próprio do escritório (a UI legada só o exibe para alguns tribunais).</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>assuntoIds</b></td><td>lista @Positive</td><td>Assuntos do processo (pode ter mais de um).</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>marcadorIds</b></td><td>lista @Positive</td><td>Marcadores/etiquetas.</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>pasta</b>, <b>protocolo</b></td><td>-</td><td>Organização/identificação.</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>areaId</b></td><td>@Positive</td><td>Área de atuação.</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>valorCausa</b>, <b>valorCondenacao</b></td><td>decimal</td><td>Valores monetários.</td><td>Opcional.</td></tr>\n<tr><td valign=\"middle\"><b>situacao</b></td><td>texto livre</td><td>Situação processual.</td><td>Opcional; texto livre (ex.: PROCESSO_DISTRIBUIDO).</td></tr>\n<tr><td valign=\"middle\"><b>statusProcesso</b></td><td>enum</td><td>Estado do processo.</td><td>Um de: <code>ATIVO</code>, <code>ENCERRADO</code>.</td></tr>\n<tr><td valign=\"middle\"><b>emGrauRecurso</b>, <b>segredoJustica</b></td><td>boolean</td><td>Flags.</td><td>Opcional (default false).</td></tr>\n<tr><td valign=\"middle\"><b>monitoramentoAtivo</b></td><td>boolean</td><td>Liga a captura automática do tribunal para este processo.</td><td>Opcional (default false). <b>Consome vaga do plano</b>: se o limite de processos monitorados estiver esgotado, o cadastro é recusado com <code>409</code>. Para cadastrar de todo modo, envie <code>false</code> e ligue depois.</td></tr>\n</tbody>\n</table>\n<p><b>detalhesComplementares:</b> órgão/vara; risco/resultado/êxito/natureza/tipo de ação (texto livre); <code>faseId</code> (id de uma fase cadastrada do escritório); datas (requerimento, autuação, distribuição, fechamento, trânsito em julgado, arquivamento), honorários e observações. Todos opcionais.</p>\n<p><b>camposPersonalizados:</b> lista de <code>{ campoId, valores[] }</code> definidos pelo escritório (1 valor para campo único; vários para múltipla escolha).</p>\n<p><b>partes:</b> dois lados — <code>clientes</code> (quem o escritório representa) e <code>partesContrarias</code> (o lado adverso), cada um com <code>{ tipoPolo, clienteIds[], advogadoIds[], testemunhaIds[] }</code>. Advogados e testemunhas pertencem ao <b>lado</b>, não a uma pessoa específica.</p>\n<p><b>tipoPolo:</b> a posição processual do lado — <code>ATIVO</code>, <code>PASSIVO</code> ou <code>TERCEIRO</code>. É <b>declarado</b>, não deduzido do bloco: quando o seu cliente é réu, <code>clientes.tipoPolo = \"PASSIVO\"</code> e <code>partesContrarias.tipoPolo = \"ATIVO\"</code>. Opcional (omitido = não informado); valor desconhecido devolve <code>400</code>. Não confundir com o campo <code>polo</code> das testemunhas no banco, que indica apenas de que lado da ficha elas estão.</p>\n<p><b>controleAcesso:</b> <code>responsavelIds[]</code> e <code>equipeIds[]</code>.</p>\n<h4>Processo já cadastrado</h4>\n<p>A identidade de um processo é <b>número + tribunal</b> dentro do seu escritório. Se já existir:</p>\n<ul>\n<li><b>ativo</b> &rarr; <code>409</code>. É o mesmo processo; para alterá-lo use <code>PUT</code>.</li>\n<li><b>excluído</b> &rarr; o processo é <b>reativado</b> e recebe os dados enviados. A resposta traz <code>\"reativado\": true</code>.</li>\n</ul>\n<p>⚠️ Na reativação, o que voltou não é uma casca vazia: <b>andamentos, documentos, audiências e compromissos de agenda continuam ligados àquele processo</b>, porque nunca foram apagados. Os campos e vínculos que você enviou substituem os antigos; o histórico permanece. Vale avisar o usuário — ele pode não esperar encontrar anexos que não subiu.</p>\n</div>\n",
        "operationId": "cadastrarUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessoRequest"
              }
            }
          },
          "description": "Dados do processo a cadastrar (ver seções na descrição).",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Processo cadastrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProcessoSalvoResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 45210,\n  \"numeroProcesso\": \"0001234-96.2026.8.17.0001\",\n  \"reativado\": false\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (ex.: número CNJ fora do padrão, faseId que não é do escritório)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "403": {
            "description": "Usuário sem permissão de adicionar processo."
          },
          "409": {
            "description": "Já existe processo ativo com o mesmo número e tribunal neste escritório; ou o limite de processos monitorados do plano foi atingido (este só com monitoramentoAtivo = true). Distinga pelo campo code."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/fases/opcoes": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Listar fases do escritório (id + nome) para seleção.",
        "description": "Só fases ativas do escritório autenticado — o mesmo conjunto que o cadastro de processo aceita em `faseId`. Sem paginação: o catálogo é curado por escritório (maior hoje: 138 fases). Use `q` para filtrar; o teto é 500 linhas.",
        "operationId": "listarOpcoesUsingGET_1",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca no nome da fase.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FaseOpcaoResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/opcoes": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Buscar processos para seleção",
        "description": "<div>\n<h3>Buscar processos para seleção</h3>\n<p>Devolve uma página de processos do <b>seu escritório</b> num formato enxuto, pensado para preencher um campo de seleção — não é a listagem completa nem a ficha do processo.</p>\n<p><b>Para que serve:</b> descobrir o <code>id</code> a informar em outras rotas que se referem a um processo (por exemplo, ao criar um compromisso em <code>POST /v2/agenda</code>).</p>\n<p><b>Busca:</b> <code>q</code> casa pelo <b>número do processo</b>. Omitir <code>q</code> devolve a primeira página sem filtrar.</p>\n<p><b>Cliente:</b> <code>cpfCnpjCliente</code> filtra pelo CPF/CNPJ exato da pessoa vinculada\ncomo cliente, aceitando o valor com ou sem máscara. Pode ser combinado com <code>q</code>.</p>\n<p><b>Paginação:</b> <code>page</code> começa em <b>1</b>; <code>perPage</code> vale 15 por padrão e é <b>limitado a 100</b> (valores maiores são reduzidos ao teto, sem erro). A resposta ecoa <code>page</code>/<code>perPage</code> aplicados e o <code>total</code> de registros.</p>\n<p><b>Escopo:</b> só processos do escritório do token. Não há parâmetro para consultar outro escritório.</p>\n</div>\n",
        "operationId": "buscarUsingGET_4",
        "parameters": [
          {
            "name": "cpfCnpjCliente",
            "in": "query",
            "description": "CPF ou CNPJ exato da pessoa vinculada como cliente, com ou sem máscara. Combina com q quando os dois forem informados.",
            "required": false,
            "example": "12.345.678/0001-95",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Página, começando em 1.",
            "required": false,
            "example": 1,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máximo 100 — valores acima são reduzidos ao teto, sem erro).",
            "required": false,
            "example": 15,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (número do processo). Ausente/vazio devolve a primeira página sem filtrar.",
            "required": false,
            "example": "0001234",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de processos (vazia se nada casar com a busca).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_ProcessoResponse_"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"content\": [\n    {\n      \"id\": 45210,\n      \"numero\": \"0001234-96.2026.8.17.0001\",\n      \"tribunal\": \"TJPE\",\n      \"grau\": \"1º Grau\",\n      \"partes\": \"ACME LTDA x João da Silva\"\n    }\n  ],\n  \"page\": 1,\n  \"perPage\": 15,\n  \"total\": 1\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "CPF/CNPJ do cliente inválido."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/tipos-pedido": {
      "get": {
        "tags": [
          "Processos - Tipos de pedido"
        ],
        "summary": "Listar tipos de pedido",
        "description": "Tipos ativos do escritório, em ordem alfabética. Alimenta o campo \"Tipo de Pedido\" do cadastro de pedidos.",
        "operationId": "listarUsingGET_11",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TipoPedidoResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Processos - Tipos de pedido"
        ],
        "summary": "Criar tipo de pedido",
        "description": "O nome é obrigatório e único por escritório entre os tipos ativos. Nome repetido devolve 409.",
        "operationId": "criarUsingPOST_5",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarTipoPedidoRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TipoPedidoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{id}": {
      "put": {
        "tags": [
          "Processos"
        ],
        "summary": "Editar processo (substituição total)",
        "description": "<div>\n<h3>Editar processo</h3>\n<p><b>Substitui o processo inteiro</b> (<code>PUT</code> idempotente). O id vem do path; o corpo é o mesmo do cadastro e representa o <b>estado final completo</b>.</p>\n<p><b>Coleções:</b> <code>marcadorIds</code>, <code>partes</code>, <code>responsavelIds</code> e <code>equipeIds</code> são substituídas pelo que vier &mdash; o que não estiver no corpo é <b>removido</b>. Para manter algo, reenvie-o.</p>\n<p><b>Identidade/escopo:</b> o escritório vem da chave de API; só é possível editar processo do próprio escritório (senão 404).</p>\n<h4>Trocar número ou tribunal</h4>\n<p>A identidade do processo é <code>número + tribunal</code>. Se o novo par já pertencer a <b>outro</b> processo do escritório, a edição é recusada com <code>409</code> &mdash; inclusive quando esse outro processo está <b>excluído</b>, e nesse caso a mensagem diz isso, porque ele não aparece nas listagens. Não há fusão automática: restaure o outro processo e decida o que fazer com ele.</p>\n<p>A comparação ignora a máscara: <code>0000001-02.2020.8.26.0100</code> e <code>00000010220208260100</code> são o mesmo número. Reenviar o número atual do próprio processo nunca é conflito.</p>\n</div>\n",
        "operationId": "editarUsingPUT",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do processo a editar.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessoRequest"
              }
            }
          },
          "description": "Estado final do processo (mesmo corpo do cadastro).",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Processo atualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProcessoSalvoResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 45210,\n  \"numeroProcesso\": \"0001234-96.2026.8.17.0001\",\n  \"reativado\": false\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Payload inválido (erro de validação)."
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "403": {
            "description": "Usuário sem permissão de editar processo."
          },
          "404": {
            "description": "Processo não encontrado no escritório autenticado."
          },
          "409": {
            "description": "O novo número/tribunal já pertence a outro processo do escritório (inclusive excluído); ou o limite de processos monitorados do plano foi atingido ao ligar o monitoramento. Distinga pelo campo code."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/andamentos": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Listar andamentos da ficha do processo",
        "description": "Consulta os andamentos ativos do processo com paginação, período, pesquisa e ordenação por data.",
        "operationId": "listarAndamentosUsingGET",
        "parameters": [
          {
            "name": "dataFim",
            "in": "query",
            "description": "Data final inclusiva (yyyy-MM-dd).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataInicio",
            "in": "query",
            "description": "Data inicial inclusiva (yyyy-MM-dd).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Página, começando em 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máximo 100).",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "ID do processo.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Pesquisa no texto do andamento.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Ordem da data: ASC ou DESC.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "DESC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de andamentos retornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_AndamentoProcessoResponse_"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Processo não encontrado no escritório autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Processos"
        ],
        "summary": "Cadastrar andamento na ficha do processo",
        "operationId": "cadastrarAndamentoUsingPOST",
        "parameters": [
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AndamentoProcessoRequest"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AndamentoProcessoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/andamentos/{andamentoId}": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Consultar andamento da ficha do processo",
        "operationId": "detalharAndamentoUsingGET",
        "parameters": [
          {
            "name": "andamentoId",
            "in": "path",
            "description": "andamentoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AndamentoProcessoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "Processos"
        ],
        "summary": "Atualizar andamento da ficha do processo",
        "operationId": "atualizarAndamentoUsingPUT",
        "parameters": [
          {
            "name": "andamentoId",
            "in": "path",
            "description": "andamentoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AndamentoProcessoRequest"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AndamentoProcessoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Processos"
        ],
        "summary": "Excluir andamento da ficha do processo",
        "operationId": "excluirAndamentoUsingDELETE",
        "parameters": [
          {
            "name": "andamentoId",
            "in": "path",
            "description": "andamentoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/andamentos/{andamentoId}/ocultar": {
      "patch": {
        "tags": [
          "Processos"
        ],
        "summary": "Alternar ocultação do andamento no relatório",
        "operationId": "ocultarAndamentoUsingPATCH",
        "parameters": [
          {
            "name": "andamentoId",
            "in": "path",
            "description": "andamentoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "valor",
            "in": "query",
            "description": "valor",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AndamentoProcessoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/auditoria": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Listar fatos relevantes na timeline do processo.",
        "description": "Inclui eventos próprios do processo e fatos de agenda vinculados explicitamente. Use codigoEvento e categoria como contrato extensível; tipo é mantido por compatibilidade. Eventos ainda não catalogados continuam sendo exibidos com descrição genérica. Não inclui payload, diff ou detalhes técnicos de auditoria.",
        "operationId": "listarUsingGET_7",
        "parameters": [
          {
            "name": "pagina",
            "in": "query",
            "description": "pagina",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "tamanho",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página da timeline retornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventoTimelineProcessoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido no contrato Problem Details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado."
          },
          "403": {
            "description": "Sem permissão para consultar histórico."
          },
          "404": {
            "description": "Processo não encontrado no escritório autenticado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/auditoria/{eventoId}": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Detalhar um evento da timeline do processo.",
        "description": "Abre o antes/depois dos campos alterados por um evento — é o clique na linha cujo `possuiAlteracoes` é `true`. Continua sem payload, diff bruto, IP ou sessão. Campo sensível vem sinalizado e sem valores. Relações do processo da URL são devolvidas com o rótulo congelado para a tela; em ações em lote, relações de outros processos não são expostas neste detalhe.",
        "operationId": "detalharUsingGET_1",
        "parameters": [
          {
            "name": "eventoId",
            "in": "path",
            "description": "eventoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Detalhe do evento retornado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetalheEventoTimelineProcessoResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado."
          },
          "403": {
            "description": "Sem permissão para consultar histórico."
          },
          "404": {
            "description": "Processo ou evento não encontrado na timeline do escritório autenticado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/expedientes": {
      "get": {
        "tags": [
          "Processos - Expedientes"
        ],
        "summary": "Listar expedientes da ficha do processo",
        "description": "Consulta os expedientes ativos do processo com paginação, período, pesquisa e ordenação por data de ciência.",
        "operationId": "listarUsingGET_4",
        "parameters": [
          {
            "name": "dataFim",
            "in": "query",
            "description": "Data final inclusiva (yyyy-MM-dd).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataInicio",
            "in": "query",
            "description": "Data inicial inclusiva (yyyy-MM-dd).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Página, começando em 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máximo 100).",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "ID do processo.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Pesquisa no texto da intimação.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Ordem da data de ciência: ASC ou DESC.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "DESC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de expedientes retornada.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_ExpedienteProcessoResponse_"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Processo não encontrado no escritório autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/partes": {
      "get": {
        "tags": [
          "Processos"
        ],
        "summary": "Listar partes da ficha do processo",
        "description": "Consulta as partes vinculadas ao processo com paginação.",
        "operationId": "listarPartesUsingGET",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Página, começando em 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máximo 100).",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "ID do processo.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de partes retornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_ParteProcessoResponse_"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado (token ausente/inválido)."
          },
          "404": {
            "description": "Processo não encontrado no escritório autenticado."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/pedidos": {
      "get": {
        "tags": [
          "Processos - Pedidos"
        ],
        "summary": "Listar pedidos do processo",
        "description": "Pedidos ativos do processo, mais recentes primeiro. Valores trafegam como string decimal com ponto; ausente vem nulo, e nulo é diferente de \"0.00\".",
        "operationId": "listarUsingGET_6",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "perPage",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_PedidoProcessoResponse_"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Processos - Pedidos"
        ],
        "summary": "Criar pedido no processo",
        "description": "O tipo de pedido é obrigatório e precisa existir no catálogo do escritório. Com aplicarCondenacaoNoProcesso, o valor da condenação do pedido substitui o da ficha do processo — operação separada, com registro próprio na auditoria do processo.",
        "operationId": "criarUsingPOST_3",
        "parameters": [
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SalvarPedidoRequest"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PedidoProcessoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/processos/{processoId}/pedidos/{pedidoId}": {
      "put": {
        "tags": [
          "Processos - Pedidos"
        ],
        "summary": "Atualizar pedido do processo",
        "description": "Substituição: campo ausente esvazia o valor, não o preserva.",
        "operationId": "atualizarUsingPUT_2",
        "parameters": [
          {
            "name": "pedidoId",
            "in": "path",
            "description": "pedidoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SalvarPedidoRequest"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PedidoProcessoResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Processos - Pedidos"
        ],
        "summary": "Excluir pedido do processo",
        "description": "Exclusão lógica: a linha permanece no banco para o histórico de auditoria continuar apontando para um registro existente.",
        "operationId": "excluirUsingDELETE_3",
        "parameters": [
          {
            "name": "pedidoId",
            "in": "path",
            "description": "pedidoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "processoId",
            "in": "path",
            "description": "processoId",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes": {
      "get": {
        "tags": [
          "Publicações"
        ],
        "summary": "Listar publicações no modo padrão ou agrupado.",
        "description": "<div>\n<h3>Listar publicações individuais</h3>\n<p>Consulta as publicações do escritório autenticado para uma data de publicação. A identidade do escritório vem do token; não envie clienteId na URL.</p>\n<p><b>Data:</b> <code>dataInicio</code> é opcional e usa o formato <code>yyyy-MM-dd</code>. Esta rota representa uma única data: na ausência de dataInicio usa dataFim; sem ambas retorna página vazia. Para consultar um intervalo e receber totais por diário, use <code>GET /v2/publicacoes/agrupamentos</code>.</p>\n<p><b>Modo:</b> <code>PADRAO</code> é o default. <code>AGRUPADA</code> traz pais e publicações sem grupo; filhos são filtrados antes do total e da paginação. O modo não define o alcance das ações de tratamento.</p>\n<p><b>Listas:</b> repita o parâmetro para informar mais de um id, por exemplo <code>responsavelIds=10&amp;responsavelIds=20</code>.</p>\n<p><b>Contexto:</b> cada item mantém todos os vínculos em <code>processos</code>, incluindo processos sem tribunal. Cada vínculo contém <code>marcadores</code> com <code>id</code>, <code>titulo</code> e <code>cor</code>; ausência retorna lista vazia. Marcadores pertencem ao processo indicado e ao cliente autenticado. Responsáveis mantêm a composição histórica por número.</p>\n<table cellpadding=\"6\" cellspacing=\"0\">\n<thead><tr><th colspan=\"3\" align=\"center\" bgcolor=\"#d7e3fc\">FILTROS DA CONSULTA</th></tr><tr><th align=\"left\">Campo</th><th align=\"left\">Exemplo</th><th align=\"left\">Regra</th></tr></thead>\n<tbody>\n<tr><td><b>uf</b></td><td>SP</td><td>Opcional. Filtra a UF do diário.</td></tr>\n<tr><td><b>siglaDiario</b></td><td>TJSPDJN</td><td>Opcional. Use <code>/v2/publicacoes/opcoes/diarios</code> para descobrir as opções disponíveis.</td></tr>\n<tr><td><b>dataInicio</b></td><td>2026-09-24</td><td>Opcional. Data civil da publicação, no formato <code>yyyy-MM-dd</code>; na ausência usa dataFim. Sem ambas retorna página vazia.</td></tr>\n<tr><td><b>dataDisponibilizacaoInicio</b> / <b>dataDisponibilizacaoFim</b></td><td>2026-09-23</td><td>Opcional. Restringe pelo intervalo de disponibilização.</td></tr>\n<tr><td><b>lido</b></td><td>true</td><td>Opcional. <code>true</code> traz tratadas, incluindo descartadas; <code>false</code> traz não tratadas; ausente traz todas.</td></tr>\n<tr><td><b>numeroProcesso</b></td><td>0001234-56.2026.8.26.0001</td><td>Opcional. Busca textual pelo número do processo.</td></tr>\n<tr><td><b>responsavelIds</b> / <b>equipeIds</b></td><td>10, 20</td><td>Opcional. Filtros por responsáveis ou equipes vinculadas ao processo.</td></tr>\n<tr><td><b>somenteSemResponsaveis</b></td><td>true</td><td>Opcional. Só <code>true</code> restringe a processos sem responsáveis; ausente ou <code>false</code> não aplica esse filtro.</td></tr>\n<tr><td><b>processoCadastro</b></td><td>CADASTRADOS</td><td>Opcional. Um de: <code>TODOS</code> (padrão), <code>CADASTRADOS</code> ou <code>NAO_CADASTRADOS</code>.</td></tr>\n<tr><td><b>pagina</b> / <b>tamanho</b></td><td>1 / 15</td><td>Opcional. Página começa em 1; tamanho padrão é 15 e o máximo é 100.</td></tr>\n</tbody>\n</table>\n</div>\n",
        "operationId": "listarUsingGET_9",
        "parameters": [
          {
            "name": "dataDisponibilizacaoFim",
            "in": "query",
            "description": "Fim do intervalo de disponibilização.",
            "required": false,
            "example": "2026-09-24",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dataDisponibilizacaoInicio",
            "in": "query",
            "description": "Início do intervalo de disponibilização.",
            "required": false,
            "example": "2026-09-23",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dataFim",
            "in": "query",
            "description": "Data alternativa, usada somente quando dataInicio não é informada.",
            "required": false,
            "example": "2026-09-24",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dataInicio",
            "in": "query",
            "description": "Data da publicação; na ausência usa dataFim. Sem ambas retorna página vazia.",
            "required": false,
            "example": "2026-09-24",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "equipeIds",
            "in": "query",
            "description": "IDs das equipes. Repita o parâmetro para vários IDs.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "name": "lido",
            "in": "query",
            "description": "true para tratadas, false para não tratadas; ausente traz todas.",
            "required": false,
            "schema": {
              "type": "boolean",
              "enum": [
                false,
                true
              ]
            }
          },
          {
            "name": "modoListagem",
            "in": "query",
            "description": "PADRAO lista todos; AGRUPADA lista pais e publicações sem grupo.",
            "required": false,
            "example": "PADRAO",
            "schema": {
              "type": "string",
              "enum": [
                "AGRUPADA",
                "PADRAO"
              ],
              "default": "PADRAO"
            }
          },
          {
            "name": "numeroProcesso",
            "in": "query",
            "description": "Busca textual pelo número do processo.",
            "required": false,
            "example": "0001234-56.2026.8.26.0001",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "description": "Página, iniciando em 1.",
            "required": false,
            "example": 1,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "processoCadastro",
            "in": "query",
            "description": "Situação de cadastro do processo.",
            "required": false,
            "example": "TODOS",
            "schema": {
              "type": "string",
              "enum": [
                "CADASTRADOS",
                "NAO_CADASTRADOS",
                "TODOS"
              ],
              "default": "TODOS"
            }
          },
          {
            "name": "responsavelIds",
            "in": "query",
            "description": "IDs dos responsáveis. Repita o parâmetro para vários IDs.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "name": "siglaDiario",
            "in": "query",
            "description": "Sigla do diário obtida em /v2/publicacoes/opcoes/diarios.",
            "required": false,
            "example": "TJSPDJN",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "somenteSemResponsaveis",
            "in": "query",
            "description": "true restringe a processos sem responsáveis.",
            "required": false,
            "schema": {
              "type": "boolean",
              "enum": [
                false,
                true
              ]
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "Itens por página, entre 1 e 100.",
            "required": false,
            "example": 15,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 15
            }
          },
          {
            "name": "uf",
            "in": "query",
            "description": "UF do diário, por exemplo SP.",
            "required": false,
            "example": "SP",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de publicações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"content\": [\n    {\n      \"id\": \"507f1f77bcf86cd799439011\",\n      \"numeroProcesso\": \"0001234-56.2026.8.26.0001\",\n      \"nomeDiario\": \"Diário da Justiça Eletrônico\",\n      \"siglaDiario\": \"DJEN\",\n      \"vara\": \"3ª Vara Cível\",\n      \"orgao\": \"Tribunal de Justiça de São Paulo\",\n      \"termoPesquisado\": \"Empresa Exemplo Ltda.\",\n      \"dataPublicacao\": \"2026-09-28\",\n      \"dataDisponibilizacao\": \"2026-09-27\",\n      \"dataRecebimento\": \"2026-09-27T06:15:00\",\n      \"conteudoPublicacao\": \"Publicação fictícia usada somente na documentação da API.\",\n      \"lido\": 1,\n      \"status\": \"TRATADA\",\n      \"statusDescricao\": \"Publicação tratada\",\n      \"sugestaoIa\": {\n        \"resumo\": \"Há intimação para manifestação.\",\n        \"prazos\": [\n          {\n            \"dias\": 15,\n            \"inicio\": \"2026-09-28\",\n            \"fim\": \"2026-10-13\",\n            \"descricao\": \"Manifestação processual\"\n          }\n        ],\n        \"audiencias\": [\n          {\n            \"data\": \"2026-10-15\",\n            \"horario\": \"14:00\",\n            \"plataforma\": \"Microsoft Teams\",\n            \"local\": \"Sala virtual 1\",\n            \"endereco\": null,\n            \"modalidade\": \"VIRTUAL\",\n            \"observacoes\": \"Participação remota.\"\n          }\n        ],\n        \"proximosPassos\": [\n          \"Revisar o prazo sugerido\",\n          \"Definir responsável\"\n        ]\n      },\n      \"ultimaAcao\": {\n        \"acao\": \"CONCLUIR\",\n        \"dataHora\": \"2026-09-27T09:45:00\",\n        \"ator\": {\n          \"id\": 10,\n          \"nome\": \"Usuário de exemplo\",\n          \"email\": \"usuario@example.invalid\"\n        },\n        \"motivo\": \"Tratamento de exemplo\",\n        \"antes\": {\n          \"lido\": 0,\n          \"status\": \"NAO_TRATADA\"\n        },\n        \"depois\": {\n          \"lido\": 1,\n          \"status\": \"TRATADA\"\n        }\n      },\n      \"processos\": [\n        {\n          \"id\": 42,\n          \"numeroProcesso\": \"0001234-56.2026.8.26.0001\",\n          \"tribunalId\": 3,\n          \"tribunal\": \"TJSP\",\n          \"partes\": \"Empresa Exemplo Ltda. x Parte Exemplo\",\n          \"novo\": true,\n          \"encerrado\": false,\n          \"suspenso\": false,\n          \"semMovimentacao\": false,\n          \"probabilidadeEmBaixa\": false,\n          \"segredoJustica\": false,\n          \"monitorado\": true,\n          \"favorito\": true,\n          \"responsaveis\": [\n            {\n              \"userId\": 10,\n              \"nome\": \"Usuário de exemplo\",\n              \"foto\": null,\n              \"tribunais\": [\"TJSP\", \"TRT2\"]\n            }\n          ],\n          \"marcadores\": [\n            {\n              \"id\": 7,\n              \"titulo\": \"Urgente\",\n              \"cor\": \"#DC2626\"\n            }\n          ],\n          \"equipes\": [\n            {\n              \"id\": 30,\n              \"nome\": \"Contencioso\"\n            }\n          ]\n        }\n      ],\n      \"groupState\": \"PARENT\",\n      \"childrenCount\": 2,\n      \"childrenIds\": [\n        \"507f1f77bcf86cd799439012\",\n        \"507f1f77bcf86cd799439013\"\n      ],\n      \"variacoesPublicacaoExtraidas\": {\n        \"children\": [\n          {\n            \"childId\": \"507f1f77bcf86cd799439012\",\n            \"deltaTexto\": \"Trecho complementar da publicação.\"\n          }\n        ]\n      }\n    }\n  ],\n  \"page\": 1,\n  \"perPage\": 15,\n  \"total\": 1,\n  \"totalPages\": 1\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Filtro inválido, inclusive data fora de yyyy-MM-dd.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para consultar; a camada de segurança encerra a requisição antes do controller."
          },
          "500": {
            "description": "Erro interno ao consultar a fonte de publicações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/agrupamentos": {
      "get": {
        "tags": [
          "Publicações"
        ],
        "summary": "Listar agrupamentos de publicações.",
        "description": "<div>\n<h3>Listar agrupamentos para a atualização</h3>\n<p>Retorna uma linha por data, UF e diário, com quantidade total, tratadas, pendentes e percentual tratado. É a rota adequada para montar a grade principal da atualização de publicações.</p>\n<p><b>Tratamento:</b> <code>qtd</code> informa o total da linha. O objeto <code>tratamento</code> reúne <code>qtdTratadas</code>, <code>qtdPendentes</code>, <code>percentualTratado</code>, <code>grupoTratado</code> e <code>status</code> (PENDENTE, PARCIAL ou CONCLUIDO). Descartadas contam como tratadas; <code>grupoTratado</code> só é verdadeiro quando há publicações e nenhuma está pendente.</p>\n<p><b>Período:</b> use <code>dataInicio</code> e <code>dataFim</code>, no formato <code>yyyy-MM-dd</code>, para delimitar a consulta. Os filtros <code>uf</code>, <code>siglaDiario</code>, <code>lido</code>, <code>numeroProcesso</code>, <code>responsavelIds</code>, <code>equipeIds</code>, <code>somenteSemResponsaveis</code> e <code>processoCadastro</code> têm o mesmo significado da listagem individual.</p>\n<p><b>Cenário preenchido para teste:</b> <code>GET /v2/publicacoes/agrupamentos?processoCadastro=TODOS&amp;dataInicio=2026-09-28&amp;dataFim=2026-09-28&amp;pagina=1&amp;tamanho=25</code>. Ele corresponde à consulta legada de 28/09/2026. Na API nova, o intervalo legado <code>data=28/09/2026 - 28/09/2026</code> vira as duas datas ISO; use somente <code>tamanho</code>, sem <code>limit</code>, <code>perPage</code>, <code>per_page</code>, <code>itemsPerPage</code> ou <code>size</code>.</p>\n<p><b>Estados:</b> <code>lido=true</code> inclui publicações concluídas e descartadas; <code>lido=false</code> retorna somente as não tratadas. <code>somenteSemResponsaveis=true</code> restringe aos processos sem responsáveis. Para <code>processoCadastro</code>, use <code>TODOS</code>, <code>CADASTRADOS</code> ou <code>NAO_CADASTRADOS</code>.</p>\n<p><b>Paginação:</b> <code>pagina</code> começa em 1; <code>tamanho</code> padrão é 15 e aceita no máximo 100 itens.</p>\n</div>\n",
        "operationId": "listarAgrupamentosUsingGET",
        "parameters": [
          {
            "name": "dataDisponibilizacaoFim",
            "in": "query",
            "description": "Fim opcional do intervalo de disponibilização.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dataDisponibilizacaoInicio",
            "in": "query",
            "description": "Início opcional do intervalo de disponibilização.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dataFim",
            "in": "query",
            "description": "Fim do período. O cenário preenchido usa 28/09/2026.",
            "required": false,
            "example": "2026-09-28",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dataInicio",
            "in": "query",
            "description": "Início do período. O cenário preenchido usa 28/09/2026.",
            "required": false,
            "example": "2026-09-28",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "equipeIds",
            "in": "query",
            "description": "IDs opcionais das equipes. Repita o parâmetro para vários IDs.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "name": "lido",
            "in": "query",
            "description": "true para tratadas, false para não tratadas; ausente traz todas.",
            "required": false,
            "schema": {
              "type": "boolean",
              "enum": [
                false,
                true
              ]
            }
          },
          {
            "name": "numeroProcesso",
            "in": "query",
            "description": "Busca textual opcional pelo número do processo.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "description": "Página, iniciando em 1.",
            "required": false,
            "example": 1,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "processoCadastro",
            "in": "query",
            "description": "Situação de cadastro do processo.",
            "required": false,
            "example": "TODOS",
            "schema": {
              "type": "string",
              "enum": [
                "CADASTRADOS",
                "NAO_CADASTRADOS",
                "TODOS"
              ],
              "default": "TODOS"
            }
          },
          {
            "name": "responsavelIds",
            "in": "query",
            "description": "IDs opcionais dos responsáveis. Repita o parâmetro para vários IDs.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "name": "siglaDiario",
            "in": "query",
            "description": "Sigla opcional do diário, obtida em /v2/publicacoes/opcoes/diarios.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "somenteSemResponsaveis",
            "in": "query",
            "description": "true restringe a processos sem responsáveis.",
            "required": false,
            "schema": {
              "type": "boolean",
              "enum": [
                false,
                true
              ]
            }
          },
          {
            "name": "tamanho",
            "in": "query",
            "description": "Itens por página, entre 1 e 100. Sem parâmetro, a API usa 15; o cenário preenchido usa 25.",
            "required": false,
            "example": 25,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "uf",
            "in": "query",
            "description": "UF opcional do diário.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de agrupamentos com resumo de tratamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_AgrupamentoPublicacoesResponse_"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"content\": [\n    {\n      \"uf\": \"SP\",\n      \"siglaDiario\": \"DIARIO-EXEMPLO\",\n      \"nomeDiario\": \"Diário fictício para demonstração\",\n      \"dataPublicacao\": \"2026-09-28\",\n      \"dataDisponibilizacao\": \"2026-09-25\",\n      \"qtd\": 10,\n      \"tratamento\": {\n        \"qtdTratadas\": 9,\n        \"qtdPendentes\": 1,\n        \"percentualTratado\": 90,\n        \"grupoTratado\": false,\n        \"status\": \"PARCIAL\"\n      }\n    }\n  ],\n  \"page\": 1,\n  \"perPage\": 25,\n  \"total\": 1,\n  \"totalPages\": 1\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Filtro inválido, inclusive data fora de yyyy-MM-dd.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para consultar; a camada de segurança encerra a requisição antes do controller."
          },
          "500": {
            "description": "Erro interno ao consultar a fonte de publicações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/opcoes/diarios": {
      "get": {
        "tags": [
          "Publicações"
        ],
        "summary": "Listar diários disponíveis para filtros de publicações.",
        "description": "Retorna opções únicas (id/nome) do histórico do cliente autenticado, sem filtro de data ou tratamento e sem paginação. UF é opcional; espaços e caixa são normalizados. A ordem segue a primeira UF de cada sigla, com desempate pela sigla.",
        "operationId": "listarOpcoesDiariosUsingGET",
        "parameters": [
          {
            "name": "uf",
            "in": "query",
            "description": "UF opcional.",
            "required": false,
            "example": "SP",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Opções de diários.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OpcaoAtualizacaoPublicacoesResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Cliente inválido para consulta.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para consultar; a camada de segurança encerra a requisição antes do controller."
          },
          "500": {
            "description": "Erro interno ao consultar a fonte de publicações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/relatorios/export": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Exportar publicações em Excel ou PDF.",
        "description": "A exportação consulta as publicações do cliente autenticado por lotes. O campo Responsáveis é incluído automaticamente e o limite vem do plano contratado. Os headers X-Exportacao-Total-Encontrado, X-Exportacao-Total-Exportado e X-Exportacao-Limite informam o universo filtrado, a quantidade exportada e o limite contratado. Uma quantidade exportada menor que a encontrada indica relatório limitado pelo plano.",
        "operationId": "exportarUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportarPublicacoesRequest"
              }
            }
          },
          "description": "Filtros, campos e formato do relatório.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Arquivo do relatório.",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingResponseBody"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingResponseBody"
                }
              }
            }
          },
          "400": {
            "description": "Filtros, campos ou limite de exportação inválidos.",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para exportar; a camada de segurança encerra a requisição antes do controller."
          },
          "500": {
            "description": "Erro ao gerar o arquivo.",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/relatorios/export/async": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Solicitar relatório de publicações por e-mail.",
        "description": "Valida filtros e limite do plano e aceita a geração em segundo plano. O link é enviado ao e-mail do usuário autenticado e vale por 24 horas. 202 confirma a solicitação, não a entrega. Não repita automaticamente um pedido sem resposta.",
        "operationId": "exportarAsyncUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExportarPublicacoesRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatorioPublicacoesSolicitadoResponse"
                }
              }
            }
          },
          "202": {
            "description": "Solicitação aceita.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelatorioPublicacoesSolicitadoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Filtros, limite ou e-mail do solicitante inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado."
          },
          "403": {
            "description": "Sem permissão."
          },
          "503": {
            "description": "Capacidade de processamento esgotada; pedido não aceito.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/resumo": {
      "get": {
        "tags": [
          "Publicações"
        ],
        "summary": "Consultar o resumo de publicações por período.",
        "operationId": "resumoUsingGET",
        "responses": {
          "200": {
            "description": "Contagens do escritório autenticado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContagemAtualizacaoPublicacoesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para consultar; a camada de segurança encerra a requisição antes do controller."
          },
          "500": {
            "description": "Erro interno ao consultar a fonte de publicações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/{id}": {
      "get": {
        "tags": [
          "Publicações"
        ],
        "summary": "Consultar detalhe de uma publicação.",
        "description": "Busca uma publicação pelo ID Mongo dentro do escritório autenticado. A resposta mantém conteúdo, IA, histórico e vínculos processuais da listagem pública.",
        "operationId": "buscarPorIdUsingGET_3",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID retornado pela listagem. O exemplo é sintético; substitua por uma publicação do seu cliente.",
            "required": true,
            "example": "507f1f77bcf86cd799439011",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Detalhe da publicação.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicacaoResponse"
                }
              }
            }
          },
          "400": {
            "description": "ID ou cliente inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para consultar; a camada de segurança encerra a requisição antes do controller."
          },
          "404": {
            "description": "Publicação inexistente ou fora do escopo do cliente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "500": {
            "description": "Erro interno ao consultar a fonte de publicações.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/{id}/concluir": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Concluir uma publicação.",
        "description": "O corpo pode definir escopo ITEM (padrão) ou GRUPO. A conclusão é uma ação de negócio, por isso usa POST e é registrada no histórico da publicação. A resposta traz o estado atualizado da publicação selecionada.",
        "operationId": "concluirUsingPOST_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID retornado pela listagem. O exemplo é sintético; substitua por uma publicação do seu cliente.",
            "required": true,
            "example": "507f1f77bcf86cd799439011",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processoId",
            "in": "query",
            "description": "Processo que originou a ação na ficha; suportado somente para escopo ITEM. Omita em ações fora da ficha.",
            "required": false,
            "example": 123,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlterarConclusaoPublicacaoRequest"
              }
            }
          },
          "description": "Escopo da conclusão.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Publicação concluída.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicacaoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Publicação ou escopo inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para tratar; a camada de segurança encerra a requisição antes do controller."
          },
          "404": {
            "description": "Publicação inexistente ou fora do escopo do cliente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflito de concorrência: a publicação foi alterada simultaneamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/{id}/descartar": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Descartar uma publicação.",
        "description": "O motivo é obrigatório e o status é definido internamente como DESCARTADA; o cliente não escolhe estados persistidos.",
        "operationId": "descartarUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID retornado pela listagem. O exemplo é sintético; substitua por uma publicação do seu cliente.",
            "required": true,
            "example": "507f1f77bcf86cd799439011",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processoId",
            "in": "query",
            "description": "Processo que originou a ação na ficha; omita em ações fora da ficha.",
            "required": false,
            "example": 123,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DescartarPublicacaoRequest"
              }
            }
          },
          "description": "Motivo do descarte.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Publicação descartada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicacaoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Motivo ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para tratar; a camada de segurança encerra a requisição antes do controller."
          },
          "404": {
            "description": "Publicação inexistente ou fora do escopo do cliente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflito de concorrência: a publicação foi alterada simultaneamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/{id}/desconcluir": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Desfazer a conclusão de uma publicação.",
        "description": "O corpo pode definir escopo ITEM (padrão) ou GRUPO. A ação restaura o estado de não tratado e não desfaz um descarte anterior.",
        "operationId": "desconcluirUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID retornado pela listagem. O exemplo é sintético; substitua por uma publicação do seu cliente.",
            "required": true,
            "example": "507f1f77bcf86cd799439011",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processoId",
            "in": "query",
            "description": "Processo que originou a ação na ficha; suportado somente para escopo ITEM. Omita em ações fora da ficha.",
            "required": false,
            "example": 123,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlterarConclusaoPublicacaoRequest"
              }
            }
          },
          "description": "Escopo da alteração.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Conclusão desfeita.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicacaoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Publicação ou escopo inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para tratar; a camada de segurança encerra a requisição antes do controller."
          },
          "404": {
            "description": "Publicação inexistente ou fora do escopo do cliente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflito de concorrência: a publicação foi alterada simultaneamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/{id}/desfazer-descarte": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Desfazer o descarte de uma publicação.",
        "description": "Remove o estado DESCARTADA e devolve a publicação ao fluxo normal. A operação não marca a publicação como concluída automaticamente.",
        "operationId": "desfazerDescarteUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID retornado pela listagem. O exemplo é sintético; substitua por uma publicação do seu cliente.",
            "required": true,
            "example": "507f1f77bcf86cd799439011",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processoId",
            "in": "query",
            "description": "Processo que originou a ação na ficha; omita em ações fora da ficha.",
            "required": false,
            "example": 123,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Descarte desfeito.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicacaoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Publicação inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado; a camada de segurança encerra a requisição antes do controller."
          },
          "403": {
            "description": "Sem permissão para tratar; a camada de segurança encerra a requisição antes do controller."
          },
          "404": {
            "description": "Publicação inexistente ou fora do escopo do cliente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflito de concorrência: a publicação foi alterada simultaneamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/publicacoes/{id}/status": {
      "post": {
        "tags": [
          "Publicações"
        ],
        "summary": "Alterar o status de uma publicação.",
        "description": "Altera somente status e motivo, preservando lido, IA e vínculos. TRATADA e NAO_TRATADA não concluem/reabrem a publicação. Operação individual, com motivo obrigatório e uma escrita condicionada. A repetição do mesmo status/motivo não duplica o histórico. Usa a permissão de descarte.",
        "operationId": "alterarStatusUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processoId",
            "in": "query",
            "description": "processoId",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlterarStatusPublicacaoRequest"
              }
            }
          },
          "description": "request",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Estado atual da publicação.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicacaoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Status, motivo ou contexto inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado."
          },
          "403": {
            "description": "Sem permissão para alterar status."
          },
          "404": {
            "description": "Publicação fora do escritório/processo autorizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflito de concorrência; reler antes de nova ação.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiProblemResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/tipos-evento/opcoes": {
      "get": {
        "tags": [
          "Tipos de Evento"
        ],
        "summary": "Listar tipos de evento do cliente (id + nome) para seleção.",
        "operationId": "listarUsingGET_10",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (nome do tipo)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TipoEventoResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/usuarios/opcoes": {
      "get": {
        "tags": [
          "Usuários"
        ],
        "summary": "Buscar usuários do cliente (paginado) para seleção.",
        "operationId": "buscarUsingGET_5",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Página (1-based)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "perPage",
            "in": "query",
            "description": "Itens por página (default 15, máx 100)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Texto de busca (nome do usuário)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PaginaResponse_UsuarioResumoResponse_"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/usuarios/{id}": {
      "get": {
        "tags": [
          "Usuários"
        ],
        "summary": "Consultar o perfil cadastral de um usuário do escritório ativo.",
        "operationId": "buscarPerfilUsingGET",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do usuário",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/UsuarioPerfilResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/webhooks/endpoints": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Listar endpoints de webhook",
        "description": "Retorna os endpoints configurados pela empresa autenticada e seus tipos de evento inscritos.\n\nO resultado nunca inclui dados de outros clientes, IDs internos do provider ou segredo de assinatura.\nUse o campo `id` retornado nas rotas de atualização, inscrição, habilitação e desabilitação.\n",
        "operationId": "listarUsingGET_15",
        "responses": {
          "200": {
            "description": "Endpoints do cliente autenticado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WebhookEndpointResponse"
                  }
                },
                "examples": {
                  "response": {
                    "value": "[\n  {\n    \"id\": 123,\n    \"nome\": \"ERP Jurídico\",\n    \"url\": \"https://erp.exemplo.com/webhooks/expedit\",\n    \"status\": \"ACTIVE\",\n    \"eventTypes\": [\"agenda.compromisso.criado\", \"agenda.compromisso.concluido\", \"agenda.compromisso.atualizado\", \"agenda.comentario.criado\"]\n  }\n]\n"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Criar endpoint de webhook",
        "description": "Cadastra uma URL que receberá eventos da Expedit e define suas inscrições iniciais.\n\n**Autenticação e escopo:** envie `X-API-Key`. A empresa é identificada pela chave; `clienteId` não\nexiste no body e não pode ser escolhido pelo consumidor.\n\n**URL:** deve ser HTTPS, absoluta e pública. Endereços locais, privados, com credenciais na URL ou\nfragmento são recusados para reduzir risco de SSRF.\n\n**Tipos disponíveis:** `agenda.compromisso.criado`, `agenda.compromisso.concluido`,\n`agenda.compromisso.atualizado` e `agenda.comentario.criado`. O evento de atualização é emitido\nquando algum campo operacional exposto no contrato mudar; o de comentário é emitido quando a\nobservação é registrada diretamente em uma agenda. Envie ao menos um tipo. O conjunto não aceita\nduplicatas.\n\nA resposta confirma o estado local e solicita sincronização com o provider. `PENDING_SYNC` significa\nque o endpoint ainda será provisionado; consulte a listagem para acompanhar o estado. O segredo de\nassinatura não é retornado nesta versão da API.\n",
        "operationId": "criarUsingPOST_8",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CriarWebhookEndpointRequest"
              }
            }
          },
          "description": "Nome, URL HTTPS pública e tipos de evento a receber.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Endpoint aceito e sincronização solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 123,\n  \"nome\": \"ERP Jurídico\",\n  \"url\": \"https://erp.exemplo.com/webhooks/expedit\",\n  \"status\": \"PENDING_SYNC\",\n  \"eventTypes\": [\"agenda.compromisso.criado\", \"agenda.compromisso.concluido\", \"agenda.compromisso.atualizado\", \"agenda.comentario.criado\"]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Nome, URL ou inscrições inválidos."
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/webhooks/endpoints/{id}": {
      "put": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Atualizar endpoint de webhook",
        "description": "Substitui o nome e a URL de um endpoint da empresa autenticada.\n\nPara endpoint ativo, a alteração volta o estado local para `PENDING_SYNC` e solicita atualização no\nprovider. Para endpoint `DISABLED`, nome e URL são salvos, mas ele permanece desabilitado até a rota\nde habilitação ser chamada explicitamente.\n",
        "operationId": "atualizarUsingPUT_4",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do endpoint retornado pela criação/listagem.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarWebhookEndpointRequest"
              }
            }
          },
          "description": "Novo nome e URL HTTPS pública.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Endpoint atualizado e sincronização solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 123,\n  \"nome\": \"ERP Jurídico\",\n  \"url\": \"https://erp.exemplo.com/webhooks/expedit\",\n  \"status\": \"PENDING_SYNC\",\n  \"eventTypes\": [\"agenda.compromisso.criado\", \"agenda.compromisso.concluido\", \"agenda.compromisso.atualizado\", \"agenda.comentario.criado\"]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Nome ou URL inválidos, ou endpoint não pertence ao cliente."
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/webhooks/endpoints/{id}/desabilitar": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Desabilitar endpoint de webhook",
        "description": "Interrompe novas entregas para o endpoint e solicita sua desativação no provider.\n\nÉ idempotente: chamar novamente para um endpoint já `DISABLED` mantém o mesmo estado. Eventos já\naceitos pelo provider podem ter sido processados antes da desativação ser efetivada.\n",
        "operationId": "desabilitarUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do endpoint retornado pela criação/listagem.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Endpoint desabilitado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 123,\n  \"nome\": \"ERP Jurídico\",\n  \"url\": \"https://erp.exemplo.com/webhooks/expedit\",\n  \"status\": \"DISABLED\",\n  \"eventTypes\": [\"agenda.compromisso.criado\", \"agenda.compromisso.concluido\", \"agenda.compromisso.atualizado\", \"agenda.comentario.criado\"]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Endpoint não pertence ao cliente autenticado."
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/webhooks/endpoints/{id}/habilitar": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Habilitar endpoint de webhook",
        "description": "Reabilita um endpoint previamente `DISABLED` e solicita novo provisionamento/sincronização no\nprovider. A resposta começa em `PENDING_SYNC`; acompanhe a listagem até `ACTIVE` ou `SYNC_ERROR`.\n\nÉ idempotente: se o endpoint já estiver ativo ou pendente, a configuração atual é preservada.\n",
        "operationId": "habilitarUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do endpoint retornado pela criação/listagem.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Endpoint habilitado e sincronização solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 123,\n  \"nome\": \"ERP Jurídico\",\n  \"url\": \"https://erp.exemplo.com/webhooks/expedit\",\n  \"status\": \"PENDING_SYNC\",\n  \"eventTypes\": [\"agenda.compromisso.criado\", \"agenda.compromisso.concluido\", \"agenda.compromisso.atualizado\", \"agenda.comentario.criado\"]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Endpoint não pertence ao cliente autenticado."
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/webhooks/endpoints/{id}/secret/reveal": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Visualizar valor cifrado de assinatura",
        "description": "Retorna o valor secret_ciphertext armazenado para o endpoint solicitado após registrar a visualização na auditoria.",
        "operationId": "revelarSegredoUsingPOST",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do endpoint retornado pela criação/listagem.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Valor secret_ciphertext retornado sob demanda e sem cache.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SegredoWebhookEndpointResponse"
                }
              }
            }
          },
          "400": {
            "description": "Endpoint não pertence ao cliente ou o segredo ainda não está disponível."
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v2/webhooks/endpoints/{id}/subscriptions": {
      "put": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Substituir inscrições de eventos",
        "description": "Define o conjunto final de eventos que o endpoint receberá. Esta operação **substitui** todas as\ninscrições anteriores; não adiciona parcialmente ao conjunto existente.\n\nEnvie ao menos um tipo. Para endpoint ativo, a troca solicita sincronização com o provider. Para\nendpoint `DISABLED`, as inscrições são salvas e permanecem inativas até a habilitação explícita.\n",
        "operationId": "atualizarSubscriptionsUsingPUT",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID do endpoint retornado pela criação/listagem.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AtualizarWebhookSubscriptionsRequest"
              }
            }
          },
          "description": "Conjunto final de tipos de evento; substitui completamente o conjunto atual.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inscrições substituídas e sincronização solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointResponse"
                },
                "examples": {
                  "response": {
                    "value": "{\n  \"id\": 123,\n  \"nome\": \"ERP Jurídico\",\n  \"url\": \"https://erp.exemplo.com/webhooks/expedit\",\n  \"status\": \"PENDING_SYNC\",\n  \"eventTypes\": [\"agenda.compromisso.criado\", \"agenda.compromisso.concluido\", \"agenda.compromisso.atualizado\", \"agenda.comentario.criado\"]\n}\n"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Lista vazia, tipo inválido ou endpoint fora do cliente."
          },
          "401": {
            "description": "Chave de API ausente ou inválida."
          },
          "403": {
            "description": "Chave sem permissão para esta operação."
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://api.expedit.com.br"
    }
  ],
  "components": {
    "requestBodies": {
      "AndamentoProcessoRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AndamentoProcessoRequest"
            }
          }
        },
        "description": "request",
        "required": true
      },
      "ConcluirAgendaRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ConcluirAgendaRequest"
            }
          }
        },
        "description": "request"
      },
      "SalvarPedidoRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SalvarPedidoRequest"
            }
          }
        },
        "description": "request",
        "required": true
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "name": "X-API-Key",
        "in": "header"
      }
    },
    "schemas": {
      "AgendaItemResponse": {
        "type": "object",
        "properties": {
          "arquivos": {
            "type": "string"
          },
          "arquivos_url": {
            "type": "string"
          },
          "audiencia": {
            "type": "object"
          },
          "comentarios": {
            "type": "object"
          },
          "compromisso": {
            "type": "object"
          },
          "concluido": {
            "type": "integer",
            "format": "int32"
          },
          "data_fatal": {
            "type": "string"
          },
          "data_fim": {
            "type": "string"
          },
          "data_inicio": {
            "type": "string"
          },
          "diligencia": {
            "type": "object"
          },
          "expediente": {
            "type": "object"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "marcador": {
            "type": "object"
          },
          "observacao": {
            "type": "string"
          },
          "processo": {
            "type": "object"
          },
          "publicacao_id": {
            "type": "string"
          },
          "responsaveis": {
            "type": "object"
          },
          "tipo": {
            "type": "string"
          },
          "tipo_compromisso": {
            "type": "object"
          },
          "titulo": {
            "type": "string"
          },
          "visualizacao": {
            "type": "object"
          }
        },
        "title": "AgendaItemResponse"
      },
      "AgendaResponseDTO": {
        "type": "object",
        "properties": {
          "audienciaId": {
            "type": "integer",
            "format": "int64"
          },
          "concluido": {
            "type": "boolean"
          },
          "cor": {
            "type": "string"
          },
          "dataFatal": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "diaTodo": {
            "type": "boolean"
          },
          "documentos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DocumentoResponse"
            }
          },
          "equipesIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "expedienteId": {
            "type": "integer",
            "format": "int64"
          },
          "fim": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "inicio": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "local": {
            "type": "string"
          },
          "observacao": {
            "type": "string"
          },
          "pessoaId": {
            "type": "integer",
            "format": "int64"
          },
          "prioridade": {
            "type": "string"
          },
          "privada": {
            "type": "boolean"
          },
          "processoId": {
            "type": "integer",
            "format": "int64"
          },
          "publicacaoId": {
            "type": "string"
          },
          "recorrencia": {
            "$ref": "#/components/schemas/RecorrenciaResponse"
          },
          "responsaveisIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "revisores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RevisorResponse"
            }
          },
          "tipoAlerta": {
            "type": "string"
          },
          "tipoEventoId": {
            "type": "integer",
            "format": "int64"
          },
          "titulo": {
            "type": "string"
          }
        },
        "title": "AgendaResponseDTO"
      },
      "AgrupamentoPublicacoesResponse": {
        "type": "object",
        "properties": {
          "dataDisponibilizacao": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "dataPublicacao": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "nomeDiario": {
            "type": "string"
          },
          "qtd": {
            "type": "integer",
            "format": "int32"
          },
          "siglaDiario": {
            "type": "string"
          },
          "tratamento": {
            "$ref": "#/components/schemas/ResumoTratamentoPublicacoesResponse"
          },
          "uf": {
            "type": "string"
          }
        },
        "title": "AgrupamentoPublicacoesResponse"
      },
      "AlteracaoMonitoramentoResponse": {
        "type": "object",
        "properties": {
          "anterior": {
            "type": "boolean"
          },
          "novo": {
            "type": "boolean"
          }
        },
        "title": "AlteracaoMonitoramentoResponse"
      },
      "AlteracaoResponse": {
        "type": "object",
        "properties": {
          "campo": {
            "type": "string"
          },
          "rotulo": {
            "type": "string"
          },
          "sensivel": {
            "type": "boolean",
            "description": "Quando true, valores não são expostos."
          },
          "tipo": {
            "type": "string"
          },
          "valorAnterior": {
            "type": "string"
          },
          "valorAnteriorExibicao": {
            "type": "string"
          },
          "valorNovo": {
            "type": "string"
          },
          "valorNovoExibicao": {
            "type": "string"
          }
        },
        "title": "AlteracaoResponse"
      },
      "AlteracaoTimelineProcessoResponse": {
        "type": "object",
        "properties": {
          "campo": {
            "type": "string",
            "example": "valorCausa",
            "description": "Nome técnico do campo, estável entre versões."
          },
          "rotulo": {
            "type": "string",
            "example": "Fase",
            "description": "Rótulo humano congelado do campo."
          },
          "sensivel": {
            "type": "boolean",
            "example": false,
            "description": "`true` quando o campo é sensível: os dois valores vêm nulos e a tela deve dizer apenas que o campo mudou."
          },
          "tipo": {
            "type": "string",
            "example": "REFERENCE",
            "description": "Tipo semântico do valor, por exemplo REFERENCE ou BOOLEAN."
          },
          "valorAnterior": {
            "type": "string",
            "example": 10000,
            "description": "Valor antes da alteração. `null` quando o campo estava vazio **ou** quando é sensível — use `sensivel` para distinguir."
          },
          "valorAnteriorExibicao": {
            "type": "string",
            "example": "Conhecimento",
            "description": "Texto do valor anterior congelado para exibição."
          },
          "valorNovo": {
            "type": "string",
            "example": 25000,
            "description": "Valor depois da alteração."
          },
          "valorNovoExibicao": {
            "type": "string",
            "example": "Instrução",
            "description": "Texto do valor novo congelado para exibição."
          }
        },
        "title": "AlteracaoTimelineProcessoResponse"
      },
      "AlterarConclusaoPublicacaoRequest": {
        "type": "object",
        "properties": {
          "escopo": {
            "type": "string",
            "example": "ITEM",
            "description": "ITEM trata apenas a publicação selecionada; GRUPO usa os membros do agrupamento. Padrão: ITEM.",
            "enum": [
              "GRUPO",
              "ITEM"
            ]
          }
        },
        "title": "AlterarConclusaoPublicacaoRequest"
      },
      "AlterarStatusPublicacaoRequest": {
        "type": "object",
        "required": [
          "motivo",
          "status"
        ],
        "properties": {
          "motivo": {
            "type": "string",
            "example": "Status revisado pelo responsável.",
            "description": "Motivo de 1 a 500 caracteres.",
            "minLength": 0,
            "maxLength": 500
          },
          "status": {
            "type": "string",
            "example": "DESCARTADA",
            "pattern": "DESCARTADA|TRATADA|NAO_TRATADA",
            "enum": [
              "DESCARTADA",
              "NAO_TRATADA",
              "TRATADA"
            ]
          }
        },
        "title": "AlterarStatusPublicacaoRequest"
      },
      "AndamentoProcessoRequest": {
        "type": "object",
        "properties": {
          "andamento": {
            "type": "string"
          },
          "comentario": {
            "type": "string"
          },
          "data_andamento": {
            "type": "string"
          }
        },
        "title": "AndamentoProcessoRequest"
      },
      "AndamentoProcessoResponse": {
        "type": "object",
        "properties": {
          "andamento": {
            "type": "string"
          },
          "comentario": {
            "type": "string"
          },
          "data_andamento": {
            "type": "string",
            "example": "yyyy-MM-dd'T'HH:mm:ss"
          },
          "dtCreated": {
            "type": "string",
            "format": "date-time"
          },
          "hash": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "ocultarRelatorio": {
            "type": "boolean"
          },
          "processoId": {
            "type": "integer",
            "format": "int64"
          },
          "tipoAndamento": {
            "type": "string"
          },
          "tribunal": {
            "type": "string"
          },
          "userId": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "AndamentoProcessoResponse"
      },
      "AnexoComentarioAgenda": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "title": "AnexoComentarioAgenda"
      },
      "ApiProblemResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "example": "validation_error"
          },
          "correlationId": {
            "type": "string",
            "example": "c4ce7307-1917-4539-b17a-9c73c972c261"
          },
          "detail": {
            "type": "string",
            "example": "Existem campos inválidos na requisição."
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ErroItemApiResponse"
            }
          },
          "instance": {
            "type": "string",
            "example": "/v2/agenda"
          },
          "requestId": {
            "type": "string",
            "example": "e9db6635-7db3-40cb-8dd2-453c25e6a461"
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "example": 400
          },
          "title": {
            "type": "string",
            "example": "Erro de validação"
          },
          "type": {
            "type": "string",
            "format": "uri",
            "example": "/errors/validation-error"
          }
        },
        "title": "ApiProblemResponse"
      },
      "ArquivarPessoasRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "example": [
              123,
              124,
              125
            ],
            "description": "IDs das pessoas a arquivar (1..1000).",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "processos": {
            "$ref": "#/components/schemas/ProcessosArquivamentoRequest"
          }
        },
        "title": "ArquivarPessoasRequest"
      },
      "ArquivarPessoasResponse": {
        "type": "object",
        "properties": {
          "arquivados": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas arquivadas",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "ignorados": {
            "type": "array",
            "description": "Pessoas não processadas e seus motivos",
            "items": {
              "$ref": "#/components/schemas/PessoaIgnoradaResponse"
            }
          },
          "processos": {
            "$ref": "#/components/schemas/ProcessosArquivamentoResponse"
          },
          "solicitados": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Quantidade de pessoas solicitadas"
          }
        },
        "title": "ArquivarPessoasResponse"
      },
      "ArquivoResponse": {
        "type": "object",
        "properties": {
          "agenda_id": {
            "type": "integer",
            "format": "int64"
          },
          "arquivo": {
            "type": "string"
          },
          "arquivoId": {
            "type": "integer",
            "format": "int64"
          },
          "data_created": {
            "type": "string",
            "example": "yyyy-MM-dd HH:mm:ss"
          },
          "extensao": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "link": {
            "type": "string"
          },
          "origem": {
            "type": "string"
          },
          "processo_id": {
            "type": "integer",
            "format": "int64"
          },
          "texto": {
            "type": "string"
          }
        },
        "title": "ArquivoResponse"
      },
      "AtividadeGeradaResponse": {
        "type": "object",
        "properties": {
          "checklists": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChecklistResponse"
            }
          },
          "dataFatal": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "equipesIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "fim": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "fluxoId": {
            "type": "integer",
            "format": "int64"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "inicio": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "prioridade": {
            "type": "string"
          },
          "responsaveisIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "revisores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RevisorResponse"
            }
          },
          "tipoEventoId": {
            "type": "integer",
            "format": "int64"
          },
          "titulo": {
            "type": "string"
          }
        },
        "title": "AtividadeGeradaResponse"
      },
      "AtorTimelineProcessoResponse": {
        "type": "object",
        "properties": {
          "fotoUrl": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          }
        },
        "title": "AtorTimelineProcessoResponse"
      },
      "AtorUltimaAcaoResponse": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "AtorUltimaAcaoResponse"
      },
      "AtualizarAgendaRequest": {
        "type": "object",
        "required": [
          "periodo",
          "tipoEventoId",
          "titulo"
        ],
        "properties": {
          "audienciaId": {
            "type": "integer",
            "format": "int64",
            "description": "Audiência vinculada"
          },
          "checklistTemplateIds": {
            "type": "array",
            "description": "IDs de templates de checklist (substitui integralmente)",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "concluido": {
            "type": "boolean",
            "description": "Concluída (default false)"
          },
          "dataFatal": {
            "type": "string",
            "description": "Data fatal do compromisso (default = fim do período)"
          },
          "equipesIds": {
            "type": "array",
            "description": "IDs das equipes (substitui integralmente)",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "escopoRecorrencia": {
            "type": "string",
            "description": "OCORRENCIA, FUTURAS ou SERIE ao editar recorrência",
            "enum": [
              "FUTURAS",
              "OCORRENCIA",
              "SERIE"
            ]
          },
          "expedienteId": {
            "type": "integer",
            "format": "int64",
            "description": "Expediente vinculado"
          },
          "local": {
            "type": "string",
            "description": "Local do compromisso"
          },
          "observacao": {
            "type": "string",
            "description": "Observação livre"
          },
          "periodo": {
            "$ref": "#/components/schemas/PeriodoRequest"
          },
          "pessoaId": {
            "type": "integer",
            "format": "int64",
            "description": "Pessoa vinculada (id único)"
          },
          "prioridade": {
            "type": "string",
            "description": "Prioridade (default SEM_PRIORIDADE)",
            "enum": [
              "ALTA",
              "BAIXA",
              "MEDIA",
              "SEM_PRIORIDADE"
            ]
          },
          "privada": {
            "type": "boolean",
            "description": "Restringe a visualização aos responsáveis"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "description": "Processo vinculado"
          },
          "publicacaoId": {
            "type": "string",
            "description": "Publicação de origem imutável: omitir/vazio preserva; se informado, deve coincidir com o vínculo existente"
          },
          "responsaveisIds": {
            "type": "array",
            "description": "IDs dos responsáveis (substitui integralmente)",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "revisorManualIds": {
            "type": "array",
            "description": "IDs de revisores manuais (substitui integralmente)",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "serieRecorrente": {
            "$ref": "#/components/schemas/SerieRecorrenteRequest"
          },
          "tipoEventoId": {
            "type": "integer",
            "format": "int64",
            "description": "Novo tipo do compromisso"
          },
          "titulo": {
            "type": "string",
            "description": "Título da atividade"
          }
        },
        "title": "AtualizarAgendaRequest"
      },
      "AtualizarPessoaRequest": {
        "type": "object",
        "required": [
          "nome"
        ],
        "properties": {
          "apelido": {
            "type": "string",
            "example": "João",
            "description": "Apelido / nome curto"
          },
          "avatarUrl": {
            "type": "string",
            "example": "https://exemplo.com/foto.jpg",
            "description": "URL pública HTTP(S) da foto — link, sem upload",
            "minLength": 0,
            "maxLength": 2048,
            "pattern": "^[hH][tT][tT][pP][sS]?://[^\\s]+$"
          },
          "camposPersonalizados": {
            "type": "array",
            "description": "Campos personalizados (definições com type=pessoa). Cada item referencia o campoId da definição e traz seus valores.",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizadoRequest"
            }
          },
          "classificacao": {
            "type": "string",
            "example": "CLIENTE",
            "description": "**Deprecated** — use `tipoId`. Só alcança os 8 tipos globais; ignorado quando `tipoId` vem junto.",
            "enum": [
              "ADVOGADO",
              "ADVOGADO_CONTRARIO",
              "CLIENTE",
              "COLABORADOR",
              "CORRESPONDENTE",
              "OUTRO",
              "PARTE_CONTRARIA",
              "TESTEMUNHA"
            ]
          },
          "complementos": {
            "$ref": "#/components/schemas/ComplementosRequest"
          },
          "contatos": {
            "$ref": "#/components/schemas/ContatosRequest"
          },
          "controleAcesso": {
            "$ref": "#/components/schemas/ControleAcessoRequest"
          },
          "cpfCnpj": {
            "type": "string",
            "example": "000.000.000-00",
            "description": "CPF ou CNPJ (com ou sem máscara)"
          },
          "documentos": {
            "$ref": "#/components/schemas/DocumentosRequest"
          },
          "endereco": {
            "$ref": "#/components/schemas/EnderecoRequest"
          },
          "naturezaPessoa": {
            "type": "string",
            "example": "FISICA",
            "description": "Natureza da pessoa; null limpa o valor",
            "enum": [
              "FISICA",
              "JURIDICA"
            ]
          },
          "nome": {
            "type": "string",
            "example": "João da Silva",
            "description": "Nome da pessoa"
          },
          "oab": {
            "type": "string",
            "description": "Número da OAB"
          },
          "representante": {
            "$ref": "#/components/schemas/RepresentanteRequest"
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID do tipo de pessoa. Use os ids de `GET /v2/pessoas/tipos`. Obrigatório, salvo se `classificacao` vier no lugar."
          }
        },
        "title": "AtualizarPessoaRequest"
      },
      "AtualizarPessoasEmLoteRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "grupoEmpresasId": {
            "type": "integer",
            "format": "int64",
            "example": 45,
            "description": "Novo grupo de empresas. Omitir preserva; 0 remove o grupo."
          },
          "ids": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas a atualizar (1..1000).",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "Novo ID de tipo. Omitir para preservar a classificação atual."
          }
        },
        "title": "AtualizarPessoasEmLoteRequest"
      },
      "AtualizarPessoasEmLoteResponse": {
        "type": "object",
        "properties": {
          "atualizadas": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas atualizadas",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "ignorados": {
            "type": "array",
            "description": "Pessoas não processadas e seus motivos",
            "items": {
              "$ref": "#/components/schemas/PessoaIgnoradaResponse"
            }
          },
          "solicitados": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Quantidade de pessoas solicitadas"
          }
        },
        "title": "AtualizarPessoasEmLoteResponse"
      },
      "AtualizarTipoPessoaRequest": {
        "type": "object",
        "properties": {
          "ativo": {
            "type": "boolean",
            "example": true,
            "description": "Reativa (`true`) ou desativa (`false`) o tipo. Omitir para manter."
          },
          "nome": {
            "type": "string",
            "example": "Fornecedor",
            "description": "Novo nome. Omitir para manter o atual.",
            "minLength": 0,
            "maxLength": 100
          }
        },
        "title": "AtualizarTipoPessoaRequest"
      },
      "AtualizarVinculoPessoaRequest": {
        "type": "object",
        "properties": {
          "dataFim": {
            "type": "string",
            "example": "2026-01-30",
            "description": "Fim da vigência; omitir limpa."
          },
          "dataInicio": {
            "type": "string",
            "example": "2020-03-15",
            "description": "Início da vigência; omitir limpa."
          },
          "observacao": {
            "type": "string",
            "description": "Observação livre; omitir limpa.",
            "minLength": 0,
            "maxLength": 2000
          }
        },
        "title": "AtualizarVinculoPessoaRequest"
      },
      "AtualizarWebhookEndpointRequest": {
        "type": "object",
        "required": [
          "nome",
          "url"
        ],
        "properties": {
          "nome": {
            "type": "string",
            "minLength": 0,
            "maxLength": 120
          },
          "url": {
            "type": "string",
            "minLength": 0,
            "maxLength": 2048
          }
        },
        "title": "AtualizarWebhookEndpointRequest"
      },
      "AtualizarWebhookSubscriptionsRequest": {
        "type": "object",
        "properties": {
          "eventTypes": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "agenda.comentario.criado",
                "agenda.compromisso.atualizado",
                "agenda.compromisso.concluido",
                "agenda.compromisso.criado",
                "andamento.recebido",
                "publicacao.recebida"
              ]
            }
          }
        },
        "title": "AtualizarWebhookSubscriptionsRequest"
      },
      "AudienciaSugeridaResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "endereco": {
            "type": "string"
          },
          "horario": {
            "type": "string"
          },
          "local": {
            "type": "string"
          },
          "modalidade": {
            "type": "string"
          },
          "observacoes": {
            "type": "string"
          },
          "plataforma": {
            "type": "string"
          }
        },
        "title": "AudienciaSugeridaResponse"
      },
      "AutorComentarioAgenda": {
        "type": "object",
        "properties": {
          "fotoUrl": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "AutorComentarioAgenda"
      },
      "BootstrapPessoasPartesRequest": {
        "type": "object",
        "required": [
          "nomes"
        ],
        "properties": {
          "grupoEmpresasId": {
            "type": "integer",
            "format": "int64",
            "example": 45,
            "description": "Grupo de empresas. Omitir ou informar 0 deixa sem grupo."
          },
          "nomes": {
            "type": "array",
            "description": "Nomes das partes selecionadas (até 80).",
            "items": {
              "type": "string"
            }
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 1,
            "description": "Classificação das pessoas. Omitido usa a classificação padrão (1)."
          }
        },
        "title": "BootstrapPessoasPartesRequest"
      },
      "BootstrapPessoasPartesResponse": {
        "type": "object",
        "properties": {
          "criadas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PessoaCriadaResponse"
            }
          },
          "falhas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PessoaFalhouResponse"
            }
          },
          "solicitados": {
            "type": "integer",
            "format": "int32",
            "example": 3
          }
        },
        "title": "BootstrapPessoasPartesResponse"
      },
      "CampoPersonalizado": {
        "type": "object",
        "required": [
          "campoId"
        ],
        "properties": {
          "campoId": {
            "type": "integer",
            "format": "int64"
          },
          "valores": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "title": "CampoPersonalizado"
      },
      "CampoPersonalizadoRequest": {
        "type": "object",
        "required": [
          "campoId"
        ],
        "properties": {
          "campoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID da definição do campo (de GET /v2/campos-personalizados/opcoes?type=PESSOA)"
          },
          "valores": {
            "type": "array",
            "example": [
              "Opção A",
              "Opção C"
            ],
            "description": "Valores do campo, SEMPRE como lista: 1 item para valor único (texto/número/data/seleção/escolha única/texto longo) ou vários para múltipla escolha (checkbox).",
            "items": {
              "type": "string"
            }
          }
        },
        "title": "CampoPersonalizadoRequest"
      },
      "CampoPersonalizadoResponse": {
        "type": "object",
        "properties": {
          "campoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID da definição do campo personalizado"
          },
          "valores": {
            "type": "array",
            "example": [
              "Opção A"
            ],
            "description": "Valores gravados para o campo",
            "items": {
              "type": "string"
            }
          }
        },
        "title": "CampoPersonalizadoResponse"
      },
      "CampoPersonalizadoResponseDTO": {
        "type": "object",
        "properties": {
          "createdAt": {
            "type": "string",
            "example": "2024-02-02 23:59:58"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "mascara": {
            "type": "string",
            "enum": [
              "CEP",
              "CNPJ",
              "CPF",
              "EMAIL",
              "LINK",
              "NORMAL",
              "TELEFONE",
              "VALOR"
            ]
          },
          "nome": {
            "type": "string"
          },
          "opcoes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tipo": {
            "type": "string",
            "enum": [
              "PESSOA",
              "PROCESSO"
            ]
          },
          "tipoEntrada": {
            "type": "string",
            "enum": [
              "DATA",
              "ESCOLHA_UNICA",
              "MULTIPLA_ESCOLHA",
              "NUMERO",
              "SELECAO",
              "TEXTO",
              "TEXTO_LONGO"
            ]
          },
          "updatedAt": {
            "type": "string",
            "example": "2025-02-02 23:59:59"
          }
        },
        "title": "CampoPersonalizadoResponseDTO"
      },
      "CancelarAgendaRequest": {
        "type": "object",
        "properties": {
          "comentario": {
            "type": "string",
            "description": "Motivo do cancelamento (obrigatoriedade/tamanho mínimo é regra de negócio do escritório)"
          }
        },
        "title": "CancelarAgendaRequest"
      },
      "ChecklistResponse": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string"
          },
          "templateId": {
            "type": "integer",
            "format": "int64"
          },
          "totalItens": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "ChecklistResponse"
      },
      "ChecklistTemplateResumoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "ChecklistTemplateResumoResponse"
      },
      "ComentarioAgendaResponse": {
        "type": "object",
        "properties": {
          "agendaId": {
            "type": "integer",
            "format": "int64"
          },
          "anexos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnexoComentarioAgenda"
            }
          },
          "autor": {
            "$ref": "#/components/schemas/AutorComentarioAgenda"
          },
          "autorId": {
            "type": "integer",
            "format": "int64"
          },
          "comentario": {
            "type": "string"
          },
          "criadoEm": {
            "type": "string"
          },
          "data": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "mencoesUsuariosIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "processoId": {
            "type": "integer",
            "format": "int64"
          },
          "titulo": {
            "type": "string"
          }
        },
        "title": "ComentarioAgendaResponse",
        "description": "Comentário criado no contexto de uma atividade de agenda."
      },
      "ComplementosRequest": {
        "type": "object",
        "properties": {
          "grupoEmpresasId": {
            "type": "integer",
            "format": "int64",
            "description": "ID do grupo de empresas"
          },
          "indicacaoId": {
            "type": "integer",
            "format": "int64",
            "description": "ID da indicação. **Legado** — prefira `indicacoes`. Continua aceito para quem já o envia; vindo junto de `indicacoes`, só é aceito se apontar para a mais antiga do conjunto."
          },
          "indicacoes": {
            "type": "array",
            "description": "Indicações da pessoa, cada uma com observação própria. Sem ordem e sem principal — a lista é exibida inteira.",
            "items": {
              "$ref": "#/components/schemas/IndicacaoRequest"
            }
          },
          "observacoes": {
            "type": "string",
            "description": "Observações"
          },
          "valorHora": {
            "type": "number",
            "example": 250,
            "description": "Valor da hora"
          }
        },
        "title": "ComplementosRequest"
      },
      "ComplementosResponse": {
        "type": "object",
        "properties": {
          "grupoEmpresasId": {
            "type": "integer",
            "format": "int64",
            "description": "ID do grupo de empresas"
          },
          "indicacaoId": {
            "type": "integer",
            "format": "int64",
            "description": "ID da indicação. **Legado** — use `indicacoes`. É a projeção da mais antiga do conjunto: quem tem três indicações aparece aqui com uma só."
          },
          "indicacoes": {
            "type": "array",
            "description": "Indicações da pessoa, da mais antiga para a mais recente.",
            "items": {
              "$ref": "#/components/schemas/IndicacaoResponse"
            }
          },
          "observacoes": {
            "type": "string",
            "description": "Observações"
          },
          "valorHora": {
            "type": "number",
            "example": 250,
            "description": "Valor da hora"
          }
        },
        "title": "ComplementosResponse"
      },
      "ConcluirAgendaRequest": {
        "type": "object",
        "title": "ConcluirAgendaRequest"
      },
      "ConcluirAgendaResponse": {
        "type": "object",
        "properties": {
          "concluido": {
            "type": "boolean"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "ConcluirAgendaResponse"
      },
      "ContadoresResponse": {
        "type": "object",
        "properties": {
          "audiencias": {
            "type": "integer",
            "format": "int64",
            "example": 3,
            "description": "Audiências desses processos"
          },
          "processos": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "Processos em que a pessoa aparece, em qualquer papel"
          }
        },
        "title": "ContadoresResponse"
      },
      "ContagemAtualizacaoPublicacoesResponse": {
        "type": "object",
        "properties": {
          "all": {
            "type": "integer",
            "format": "int64"
          },
          "fifteenDays": {
            "type": "integer",
            "format": "int64"
          },
          "now": {
            "type": "integer",
            "format": "int64"
          },
          "threeDays": {
            "type": "integer",
            "format": "int64"
          },
          "week": {
            "type": "integer",
            "format": "int64"
          },
          "yesterday": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "ContagemAtualizacaoPublicacoesResponse"
      },
      "Contato": {
        "type": "object",
        "properties": {
          "celular": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "telefone": {
            "type": "string"
          }
        },
        "title": "Contato"
      },
      "ContatosRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "joao@exemplo.com",
            "description": "E-mail"
          },
          "facebook": {
            "type": "string",
            "description": "Perfil do Facebook"
          },
          "instagram": {
            "type": "string",
            "description": "Perfil do Instagram"
          },
          "linkedin": {
            "type": "string",
            "description": "Perfil do LinkedIn"
          },
          "site": {
            "type": "string",
            "description": "Site"
          },
          "telefone03": {
            "type": "string",
            "description": "Terceiro telefone"
          },
          "telefonePrincipal": {
            "type": "string",
            "example": "(81) 99999-9999",
            "description": "Telefone principal"
          },
          "telefoneSecundario": {
            "type": "string",
            "description": "Telefone secundário"
          }
        },
        "title": "ContatosRequest"
      },
      "ContatosResponse": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "joao@exemplo.com",
            "description": "E-mail"
          },
          "facebook": {
            "type": "string",
            "description": "Perfil do Facebook"
          },
          "instagram": {
            "type": "string",
            "description": "Perfil do Instagram"
          },
          "linkedin": {
            "type": "string",
            "description": "Perfil do LinkedIn"
          },
          "site": {
            "type": "string",
            "description": "Site"
          },
          "telefone03": {
            "type": "string",
            "description": "Terceiro telefone"
          },
          "telefonePrincipal": {
            "type": "string",
            "example": "(81) 99999-9999",
            "description": "Telefone principal"
          },
          "telefoneSecundario": {
            "type": "string",
            "description": "Telefone secundário"
          }
        },
        "title": "ContatosResponse"
      },
      "ContextoCriacaoResponse": {
        "type": "object",
        "properties": {
          "checklistsGerados": {
            "type": "integer",
            "format": "int64"
          },
          "filhasFluxoGeradas": {
            "type": "integer",
            "format": "int64"
          },
          "ocorrenciasGeradas": {
            "type": "integer",
            "format": "int64"
          },
          "origem": {
            "type": "string"
          }
        },
        "title": "ContextoCriacaoResponse"
      },
      "ControleAcesso": {
        "type": "object",
        "properties": {
          "equipeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "responsavelIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "ControleAcesso"
      },
      "ControleAcessoRequest": {
        "type": "object",
        "properties": {
          "equipesIds": {
            "type": "array",
            "example": [
              406
            ],
            "description": "IDs das equipes. Ids de /v2/equipes/opcoes.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "responsaveisIds": {
            "type": "array",
            "example": [
              1649
            ],
            "description": "IDs dos responsáveis. Ids de /v2/usuarios/opcoes.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "ControleAcessoRequest"
      },
      "ControleAcessoResponse": {
        "type": "object",
        "properties": {
          "equipesIds": {
            "type": "array",
            "example": [
              406
            ],
            "description": "IDs das equipes vinculadas",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "responsaveisIds": {
            "type": "array",
            "example": [
              1649
            ],
            "description": "IDs dos responsáveis vinculados",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "ControleAcessoResponse"
      },
      "CreateCampoPersonalizadoRequestDTO": {
        "type": "object",
        "required": [
          "nome",
          "tipo",
          "tipoEntrada"
        ],
        "properties": {
          "mascara": {
            "type": "string",
            "enum": [
              "CEP",
              "CNPJ",
              "CPF",
              "EMAIL",
              "LINK",
              "NORMAL",
              "TELEFONE",
              "VALOR"
            ]
          },
          "nome": {
            "type": "string"
          },
          "opcoes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tipo": {
            "type": "string",
            "enum": [
              "PESSOA",
              "PROCESSO"
            ]
          },
          "tipoEntrada": {
            "type": "string",
            "enum": [
              "DATA",
              "ESCOLHA_UNICA",
              "MULTIPLA_ESCOLHA",
              "NUMERO",
              "SELECAO",
              "TEXTO",
              "TEXTO_LONGO"
            ]
          }
        },
        "title": "CreateCampoPersonalizadoRequestDTO"
      },
      "CriarAgendaRequest": {
        "type": "object",
        "required": [
          "periodo",
          "tipoEventoId",
          "titulo"
        ],
        "properties": {
          "audienciaId": {
            "type": "integer",
            "format": "int64",
            "example": 789,
            "description": "Audiência vinculada"
          },
          "checklistTemplateIds": {
            "type": "array",
            "description": "IDs de templates de checklist a clonar",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "concluido": {
            "type": "boolean",
            "example": false,
            "description": "Criar já concluída (default false; grava só a flag)"
          },
          "dataFatal": {
            "type": "string",
            "example": "2026-07-12",
            "description": "Data fatal do compromisso (default = fim do período)"
          },
          "documentos": {
            "type": "array",
            "description": "Links de documentos (SharePoint)",
            "items": {
              "$ref": "#/components/schemas/DocumentoRequest"
            }
          },
          "equipesIds": {
            "type": "array",
            "description": "IDs das equipes",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "expedienteId": {
            "type": "integer",
            "format": "int64",
            "example": 456,
            "description": "Expediente vinculado"
          },
          "herdarDoProcesso": {
            "$ref": "#/components/schemas/HerdarDoProcessoRequest"
          },
          "local": {
            "type": "string",
            "example": "Sala de reuniões 2",
            "description": "Local do compromisso"
          },
          "observacao": {
            "type": "string",
            "description": "Observação livre"
          },
          "periodo": {
            "$ref": "#/components/schemas/PeriodoRequest"
          },
          "pessoasIds": {
            "type": "array",
            "example": [
              123
            ],
            "description": "Pessoa(s) vinculada(s). Array por compatibilidade futura; hoje aceita no máximo 1. Ids de /v2/pessoas/opcoes.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "prioridade": {
            "type": "string",
            "example": "MEDIA",
            "description": "Prioridade (default SEM_PRIORIDADE)",
            "enum": [
              "ALTA",
              "BAIXA",
              "MEDIA",
              "SEM_PRIORIDADE"
            ]
          },
          "privada": {
            "type": "boolean",
            "example": true,
            "description": "Restringe a visualização aos responsáveis"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "example": 999,
            "description": "Processo vinculado"
          },
          "publicacaoId": {
            "type": "string",
            "example": "665f1a2b9c8d7e6f5a4b3c2d",
            "description": "Identificador MongoDB da publicação vinculada"
          },
          "recorrencia": {
            "$ref": "#/components/schemas/RecorrenciaRequest"
          },
          "responsaveisIds": {
            "type": "array",
            "description": "IDs dos responsáveis",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "revisores": {
            "$ref": "#/components/schemas/RevisoresRequest"
          },
          "serieRecorrente": {
            "$ref": "#/components/schemas/SerieRecorrenteRequest"
          },
          "tipoEventoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "Tipo do compromisso (ex.: Audiência, Prazo, Reunião). Id de /v2/tipos-evento/opcoes"
          },
          "titulo": {
            "type": "string",
            "example": "Contestação - Processo X",
            "description": "Título da atividade"
          }
        },
        "title": "CriarAgendaRequest"
      },
      "CriarAgendaResponse": {
        "type": "object",
        "properties": {
          "atividadesGeradas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AtividadeGeradaResponse"
            }
          },
          "audienciaId": {
            "type": "integer",
            "format": "int64"
          },
          "checklists": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChecklistResponse"
            }
          },
          "concluido": {
            "type": "boolean"
          },
          "cor": {
            "type": "string"
          },
          "dataFatal": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "diaTodo": {
            "type": "boolean"
          },
          "documentos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DocumentoResponse"
            }
          },
          "equipesIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "expedienteId": {
            "type": "integer",
            "format": "int64"
          },
          "fim": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "inicio": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "local": {
            "type": "string"
          },
          "ocorrencias": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OcorrenciaResponse"
            }
          },
          "pessoasIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "prioridade": {
            "type": "string"
          },
          "privada": {
            "type": "boolean"
          },
          "processoId": {
            "type": "integer",
            "format": "int64"
          },
          "publicacaoId": {
            "type": "string"
          },
          "recorrencia": {
            "$ref": "#/components/schemas/RecorrenciaResponse"
          },
          "responsaveisIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "revisores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RevisorResponse"
            }
          },
          "tipoAlerta": {
            "type": "string"
          },
          "tipoEventoId": {
            "type": "integer",
            "format": "int64"
          },
          "titulo": {
            "type": "string"
          }
        },
        "title": "CriarAgendaResponse"
      },
      "CriarComentarioAgendaRequest": {
        "type": "object",
        "required": [
          "comentario"
        ],
        "properties": {
          "anexosIds": {
            "type": "array",
            "example": [
              12,
              13
            ],
            "description": "IDs de arquivos já anexados à própria agenda.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "comentario": {
            "type": "string",
            "example": "Solicitado retorno do cliente.",
            "description": "Texto do comentário."
          },
          "mencoesUsuariosIds": {
            "type": "array",
            "example": [
              1649,
              2754
            ],
            "description": "IDs de usuários ativos do cliente mencionados no comentário.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "vincularAoProcesso": {
            "type": "boolean",
            "example": false,
            "description": "Quando verdadeiro, torna o comentário também visível no processo vinculado à agenda."
          }
        },
        "title": "CriarComentarioAgendaRequest",
        "description": "Dados para registrar um comentário em uma atividade de agenda."
      },
      "CriarPessoaRequest": {
        "type": "object",
        "required": [
          "nome"
        ],
        "properties": {
          "apelido": {
            "type": "string",
            "example": "João",
            "description": "Apelido / nome curto"
          },
          "avatarUrl": {
            "type": "string",
            "example": "https://exemplo.com/foto.jpg",
            "description": "URL pública HTTP(S) da foto — link, sem upload",
            "minLength": 0,
            "maxLength": 2048,
            "pattern": "^[hH][tT][tT][pP][sS]?://[^\\s]+$"
          },
          "camposPersonalizados": {
            "type": "array",
            "description": "Campos personalizados (definições com type=pessoa). Cada item referencia o campoId da definição e traz seus valores.",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizadoRequest"
            }
          },
          "classificacao": {
            "type": "string",
            "example": "CLIENTE",
            "description": "**Deprecated** — use `tipoId`. Só alcança os 8 tipos globais; ignorado quando `tipoId` vem junto.",
            "enum": [
              "ADVOGADO",
              "ADVOGADO_CONTRARIO",
              "CLIENTE",
              "COLABORADOR",
              "CORRESPONDENTE",
              "OUTRO",
              "PARTE_CONTRARIA",
              "TESTEMUNHA"
            ]
          },
          "complementos": {
            "$ref": "#/components/schemas/ComplementosRequest"
          },
          "contatos": {
            "$ref": "#/components/schemas/ContatosRequest"
          },
          "controleAcesso": {
            "$ref": "#/components/schemas/ControleAcessoRequest"
          },
          "cpfCnpj": {
            "type": "string",
            "example": "000.000.000-00",
            "description": "CPF ou CNPJ (com ou sem máscara)"
          },
          "documentos": {
            "$ref": "#/components/schemas/DocumentosRequest"
          },
          "endereco": {
            "$ref": "#/components/schemas/EnderecoRequest"
          },
          "naturezaPessoa": {
            "type": "string",
            "example": "FISICA",
            "description": "Natureza da pessoa (opcional, sem regra condicional no v1)",
            "enum": [
              "FISICA",
              "JURIDICA"
            ]
          },
          "nome": {
            "type": "string",
            "example": "João da Silva",
            "description": "Nome da pessoa"
          },
          "oab": {
            "type": "string",
            "description": "Número da OAB"
          },
          "representante": {
            "$ref": "#/components/schemas/RepresentanteRequest"
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID do tipo de pessoa. Use os ids de `GET /v2/pessoas/tipos`. Default: 1 (Cliente)."
          }
        },
        "title": "CriarPessoaRequest"
      },
      "CriarPessoaResponse": {
        "type": "object",
        "properties": {
          "apelido": {
            "type": "string",
            "example": "João",
            "description": "Apelido ou nome curto"
          },
          "avatarUrl": {
            "type": "string",
            "description": "URL do avatar"
          },
          "camposPersonalizados": {
            "type": "array",
            "description": "Campos personalizados gravados",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizadoResponse"
            }
          },
          "classificacao": {
            "type": "string",
            "example": "CLIENTE",
            "description": "**Deprecated** — use `tipoNome` para exibir e `tipoId` para identificar. Só é preenchido nos 8 tipos globais; tipo do escritório vem `null`."
          },
          "complementos": {
            "$ref": "#/components/schemas/ComplementosResponse"
          },
          "contatos": {
            "$ref": "#/components/schemas/ContatosResponse"
          },
          "controleAcesso": {
            "$ref": "#/components/schemas/ControleAcessoResponse"
          },
          "cpfCnpj": {
            "type": "string",
            "example": "000.000.000-00",
            "description": "CPF ou CNPJ informado"
          },
          "documentos": {
            "$ref": "#/components/schemas/DocumentosResponse"
          },
          "endereco": {
            "$ref": "#/components/schemas/EnderecoResponse"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 123,
            "description": "Identificador da pessoa criada"
          },
          "naturezaPessoa": {
            "type": "string",
            "example": "FISICA",
            "description": "Natureza da pessoa"
          },
          "nome": {
            "type": "string",
            "example": "João da Silva",
            "description": "Nome da pessoa"
          },
          "oab": {
            "type": "string",
            "description": "Número da OAB"
          },
          "representante": {
            "$ref": "#/components/schemas/RepresentanteResponse"
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID do tipo no catálogo (`GET /v2/pessoas/tipos`)"
          },
          "tipoNome": {
            "type": "string",
            "example": "Curador",
            "description": "Nome do tipo, para exibir"
          }
        },
        "title": "CriarPessoaResponse"
      },
      "CriarTipoPedidoRequest": {
        "type": "object",
        "required": [
          "nome"
        ],
        "properties": {
          "nome": {
            "type": "string",
            "example": "Dano Moral",
            "description": "Nome do tipo de pedido",
            "minLength": 0,
            "maxLength": 255
          }
        },
        "title": "CriarTipoPedidoRequest"
      },
      "CriarTipoPessoaRequest": {
        "type": "object",
        "required": [
          "nome"
        ],
        "properties": {
          "nome": {
            "type": "string",
            "example": "Fornecedor",
            "description": "Nome do tipo, único entre os globais e os do escritório.",
            "minLength": 0,
            "maxLength": 100
          }
        },
        "title": "CriarTipoPessoaRequest"
      },
      "CriarVinculoPessoaRequest": {
        "type": "object",
        "required": [
          "pessoaRelacionadaId",
          "tipoRelacaoId"
        ],
        "properties": {
          "dataFim": {
            "type": "string",
            "example": "2026-01-30",
            "description": "Fim da vigência — o vínculo terminou de verdade (divórcio). Para cadastro errado, use `DELETE`."
          },
          "dataInicio": {
            "type": "string",
            "example": "2020-03-15",
            "description": "Início da vigência."
          },
          "observacao": {
            "type": "string",
            "description": "Observação livre.",
            "minLength": 0,
            "maxLength": 2000
          },
          "papelPessoaAtual": {
            "type": "string",
            "example": "DESTINO",
            "description": "Qual lado a pessoa da URL ocupa. **Obrigatório** quando o tipo tem `simetrica: false` — sem ele não há como saber quem é o pai e quem é o filho. Ignorado em tipo simétrico.",
            "enum": [
              "DESTINO",
              "ORIGEM"
            ]
          },
          "pessoaRelacionadaId": {
            "type": "integer",
            "format": "int64",
            "example": 20,
            "description": "ID da outra pessoa. Ids de `GET /v2/pessoas/opcoes`."
          },
          "tipoRelacaoId": {
            "type": "integer",
            "format": "int64",
            "example": 3,
            "description": "ID do tipo. Ids de `GET /v2/pessoas/vinculos/tipos`."
          }
        },
        "title": "CriarVinculoPessoaRequest"
      },
      "CriarWebhookEndpointRequest": {
        "type": "object",
        "required": [
          "nome",
          "url"
        ],
        "properties": {
          "eventTypes": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "agenda.comentario.criado",
                "agenda.compromisso.atualizado",
                "agenda.compromisso.concluido",
                "agenda.compromisso.criado",
                "andamento.recebido",
                "publicacao.recebida"
              ]
            }
          },
          "nome": {
            "type": "string",
            "minLength": 0,
            "maxLength": 120
          },
          "url": {
            "type": "string",
            "minLength": 0,
            "maxLength": 2048
          }
        },
        "title": "CriarWebhookEndpointRequest"
      },
      "DadosBasicos": {
        "type": "object",
        "required": [
          "numeroProcesso",
          "statusProcesso",
          "tribunalId"
        ],
        "properties": {
          "areaId": {
            "type": "integer",
            "format": "int64"
          },
          "assuntoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "classeJudicial": {
            "type": "string"
          },
          "emGrauRecurso": {
            "type": "boolean"
          },
          "formatoNumero": {
            "type": "string"
          },
          "marcadorIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "monitoramentoAtivo": {
            "type": "boolean"
          },
          "numeroInterno": {
            "type": "string"
          },
          "numeroProcesso": {
            "type": "string"
          },
          "pasta": {
            "type": "string"
          },
          "protocolo": {
            "type": "string"
          },
          "segredoJustica": {
            "type": "boolean"
          },
          "situacao": {
            "type": "string"
          },
          "statusProcesso": {
            "type": "string"
          },
          "tipoProcesso": {
            "type": "integer",
            "format": "int32",
            "minimum": 1,
            "maximum": 2,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
          },
          "tribunalId": {
            "type": "integer",
            "format": "int64"
          },
          "valorCausa": {
            "type": "number"
          },
          "valorCondenacao": {
            "type": "number"
          }
        },
        "title": "DadosBasicos"
      },
      "Datas": {
        "type": "object",
        "properties": {
          "atualizacao": {
            "type": "string"
          },
          "cadastro": {
            "type": "string"
          },
          "ultimoAcesso": {
            "type": "string"
          }
        },
        "title": "Datas"
      },
      "DesarquivarPessoasRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "example": [
              123,
              124,
              125
            ],
            "description": "IDs das pessoas a desarquivar (1..1000).",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "processos": {
            "$ref": "#/components/schemas/ProcessosDesarquivamentoRequest"
          }
        },
        "title": "DesarquivarPessoasRequest"
      },
      "DesarquivarPessoasResponse": {
        "type": "object",
        "properties": {
          "desarquivados": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas desarquivadas",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "ignorados": {
            "type": "array",
            "description": "Pessoas não processadas e seus motivos",
            "items": {
              "$ref": "#/components/schemas/PessoaIgnoradaResponse"
            }
          },
          "processos": {
            "$ref": "#/components/schemas/ProcessosDesarquivamentoResponse"
          },
          "solicitados": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Quantidade de pessoas solicitadas"
          }
        },
        "title": "DesarquivarPessoasResponse"
      },
      "DescartarPublicacaoRequest": {
        "type": "object",
        "required": [
          "motivo"
        ],
        "properties": {
          "motivo": {
            "type": "string",
            "example": "Publicação sem relação com os processos acompanhados.",
            "description": "Motivo do descarte, de 1 a 500 caracteres após remover espaços nas extremidades.",
            "minLength": 0,
            "maxLength": 500
          }
        },
        "title": "DescartarPublicacaoRequest"
      },
      "DesfazerCancelamentoAgendaRequest": {
        "type": "object",
        "title": "DesfazerCancelamentoAgendaRequest"
      },
      "DetalheEventoTimelineAgendaResponse": {
        "type": "object",
        "properties": {
          "alteracoes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AlteracaoResponse"
            }
          },
          "contextoCriacao": {
            "$ref": "#/components/schemas/ContextoCriacaoResponse"
          },
          "evento": {
            "$ref": "#/components/schemas/EventoTimelineAgendaResponse"
          },
          "relacoes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelacaoResponse"
            }
          }
        },
        "title": "DetalheEventoTimelineAgendaResponse"
      },
      "DetalheEventoTimelineProcessoResponse": {
        "type": "object",
        "properties": {
          "alteracoes": {
            "type": "array",
            "description": "Campos alterados por este evento. Vazia quando o evento não alterou campos.",
            "items": {
              "$ref": "#/components/schemas/AlteracaoTimelineProcessoResponse"
            }
          },
          "evento": {
            "$ref": "#/components/schemas/EventoTimelineProcessoResponse"
          },
          "relacoes": {
            "type": "array",
            "description": "Vínculos adicionados ou removidos por este evento.",
            "items": {
              "$ref": "#/components/schemas/RelacaoTimelineProcessoResponse"
            }
          }
        },
        "title": "DetalheEventoTimelineProcessoResponse"
      },
      "DetalhesComplementares": {
        "type": "object",
        "properties": {
          "dataArquivamento": {
            "type": "string"
          },
          "dataAutuacao": {
            "type": "string"
          },
          "dataDistribuicao": {
            "type": "string"
          },
          "dataFechamento": {
            "type": "string"
          },
          "dataRequerimento": {
            "type": "string"
          },
          "dataTransitoJulgado": {
            "type": "string"
          },
          "descricaoHonorarios": {
            "type": "string"
          },
          "exitoId": {
            "type": "string"
          },
          "faseId": {
            "type": "integer",
            "format": "int64"
          },
          "naturezaAcaoId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255
          },
          "observacoes": {
            "type": "string",
            "minLength": 0,
            "maxLength": 2000
          },
          "orgaoVara": {
            "type": "string"
          },
          "resultadoId": {
            "type": "string"
          },
          "riscoId": {
            "type": "string"
          },
          "tipoAcaoId": {
            "type": "string"
          }
        },
        "title": "DetalhesComplementares"
      },
      "DocumentoRequest": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "rotulo": {
            "type": "string",
            "example": "Petição inicial",
            "description": "Rótulo exibido"
          },
          "url": {
            "type": "string",
            "example": "https://sharepoint.com/...",
            "description": "URL do documento"
          }
        },
        "title": "DocumentoRequest"
      },
      "DocumentoResponse": {
        "type": "object",
        "properties": {
          "rotulo": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "title": "DocumentoResponse"
      },
      "DocumentosRequest": {
        "type": "object",
        "properties": {
          "cid": {
            "type": "string",
            "description": "CID"
          },
          "ctps": {
            "type": "string",
            "description": "CTPS"
          },
          "dataEmissaoRg": {
            "type": "string",
            "description": "Data de emissão do RG"
          },
          "dataNascimento": {
            "type": "string",
            "example": "1990-01-31",
            "description": "Data de nascimento"
          },
          "estadoCivil": {
            "type": "string",
            "description": "Estado civil"
          },
          "nacionalidade": {
            "type": "string",
            "description": "Nacionalidade"
          },
          "naturalidade": {
            "type": "string",
            "description": "Naturalidade"
          },
          "nomeMae": {
            "type": "string",
            "description": "Nome da mãe"
          },
          "nomePai": {
            "type": "string",
            "description": "Nome do pai"
          },
          "orgaoEmissorRg": {
            "type": "string",
            "description": "Órgão emissor do RG"
          },
          "pis": {
            "type": "string",
            "description": "PIS"
          },
          "profissao": {
            "type": "string",
            "description": "Profissão"
          },
          "rg": {
            "type": "string",
            "description": "RG"
          },
          "sexo": {
            "type": "string",
            "description": "Sexo"
          }
        },
        "title": "DocumentosRequest"
      },
      "DocumentosResponse": {
        "type": "object",
        "properties": {
          "cid": {
            "type": "string",
            "description": "CID"
          },
          "ctps": {
            "type": "string",
            "description": "CTPS"
          },
          "dataEmissaoRg": {
            "type": "string",
            "description": "Data de emissão do RG"
          },
          "dataNascimento": {
            "type": "string",
            "example": "1990-01-31",
            "description": "Data de nascimento"
          },
          "estadoCivil": {
            "type": "string",
            "description": "Estado civil"
          },
          "nacionalidade": {
            "type": "string",
            "description": "Nacionalidade"
          },
          "naturalidade": {
            "type": "string",
            "description": "Naturalidade"
          },
          "nomeMae": {
            "type": "string",
            "description": "Nome da mãe"
          },
          "nomePai": {
            "type": "string",
            "description": "Nome do pai"
          },
          "orgaoEmissorRg": {
            "type": "string",
            "description": "Órgão emissor do RG"
          },
          "pis": {
            "type": "string",
            "description": "PIS"
          },
          "profissao": {
            "type": "string",
            "description": "Profissão"
          },
          "rg": {
            "type": "string",
            "description": "RG"
          },
          "sexo": {
            "type": "string",
            "description": "Sexo"
          }
        },
        "title": "DocumentosResponse"
      },
      "EnderecoRequest": {
        "type": "object",
        "properties": {
          "bairro": {
            "type": "string",
            "description": "Bairro"
          },
          "cep": {
            "type": "string",
            "example": "50000-000",
            "description": "CEP"
          },
          "cidade": {
            "type": "string",
            "description": "Cidade"
          },
          "complemento": {
            "type": "string",
            "description": "Complemento"
          },
          "estado": {
            "type": "string",
            "example": "PE",
            "description": "UF (duas letras)",
            "minLength": 0,
            "maxLength": 2,
            "pattern": "^[a-zA-Z]{2}$"
          },
          "logradouro": {
            "type": "string",
            "description": "Logradouro"
          },
          "numero": {
            "type": "string",
            "description": "Número"
          }
        },
        "title": "EnderecoRequest"
      },
      "EnderecoResponse": {
        "type": "object",
        "properties": {
          "bairro": {
            "type": "string",
            "description": "Bairro"
          },
          "cep": {
            "type": "string",
            "example": "50000-000",
            "description": "CEP"
          },
          "cidade": {
            "type": "string",
            "description": "Cidade"
          },
          "complemento": {
            "type": "string",
            "description": "Complemento"
          },
          "estado": {
            "type": "string",
            "example": "PE",
            "description": "UF"
          },
          "logradouro": {
            "type": "string",
            "description": "Logradouro"
          },
          "numero": {
            "type": "string",
            "description": "Número"
          }
        },
        "title": "EnderecoResponse"
      },
      "Equipe": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          },
          "responsavel": {
            "type": "boolean"
          },
          "revisor": {
            "type": "boolean"
          }
        },
        "title": "Equipe"
      },
      "EquipeResumoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID da equipe"
          },
          "nome": {
            "type": "string",
            "example": "Controladoria",
            "description": "Nome da equipe"
          }
        },
        "title": "EquipeResumoResponse"
      },
      "EquipeVinculadaPublicacaoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "EquipeVinculadaPublicacaoResponse"
      },
      "ErroItemApiResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "example": "field_validation_error",
            "description": "Código estável do erro"
          },
          "field": {
            "type": "string",
            "example": "agenda.titulo",
            "description": "Campo relacionado"
          },
          "message": {
            "type": "string",
            "example": "não deve estar em branco",
            "description": "Mensagem segura"
          }
        },
        "title": "ErroItemApiResponse"
      },
      "EventoTimelineAgendaResponse": {
        "type": "object",
        "properties": {
          "acao": {
            "type": "string"
          },
          "categoria": {
            "type": "string",
            "enum": [
              "ALTERACAO",
              "CRIACAO",
              "EXCLUSAO",
              "OUTRO",
              "STATUS",
              "VINCULO",
              "VISUALIZACAO"
            ]
          },
          "codigoEvento": {
            "type": "string",
            "description": "Código estável para novos consumidores."
          },
          "descricao": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nomeAtor": {
            "type": "string",
            "description": "Nome histórico do usuário ou executor que produziu o evento."
          },
          "ocorridoEm": {
            "type": "string",
            "example": "yyyy-MM-dd'T'HH:mm:ss"
          },
          "possuiAlteracoes": {
            "type": "boolean"
          }
        },
        "title": "EventoTimelineAgendaResponse"
      },
      "EventoTimelineProcessoResponse": {
        "type": "object",
        "properties": {
          "acao": {
            "type": "string",
            "description": "Ação técnica registrada no evento."
          },
          "agendaId": {
            "type": "integer",
            "format": "int64"
          },
          "alteracaoMonitoramento": {
            "$ref": "#/components/schemas/AlteracaoMonitoramentoResponse"
          },
          "ator": {
            "$ref": "#/components/schemas/AtorTimelineProcessoResponse"
          },
          "categoria": {
            "type": "string",
            "description": "Categoria estável para agrupamento e apresentação na UI.",
            "enum": [
              "ALTERACAO",
              "CRIACAO",
              "EXCLUSAO",
              "OUTRO",
              "STATUS",
              "VINCULO",
              "VISUALIZACAO"
            ]
          },
          "codigoEvento": {
            "type": "string",
            "description": "Código estável do evento; recomendado para novos consumidores."
          },
          "descricao": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nomeAtor": {
            "type": "string",
            "description": "Nome histórico do ator; mantido para compatibilidade."
          },
          "ocorridoEm": {
            "type": "string",
            "example": "yyyy-MM-dd'T'HH:mm:ss"
          },
          "possuiAlteracoes": {
            "type": "boolean"
          },
          "tipo": {
            "type": "string",
            "description": "Tipo fechado legado; use codigoEvento e categoria em novos consumidores.",
            "enum": [
              "AGENDA_ATUALIZADA",
              "AGENDA_CANCELADA",
              "AGENDA_CANCELAMENTO_DESFEITO",
              "AGENDA_CONCLUIDA",
              "AGENDA_CRIADA",
              "AGENDA_EXCLUIDA",
              "AGENDA_REABERTA",
              "AGENDA_REAGENDADA",
              "AGENDA_VISUALIZADA",
              "EQUIPES_ADICIONADAS",
              "EQUIPES_REMOVIDAS",
              "PROCESSO_ALTERADO",
              "PROCESSO_ATUALIZADO",
              "PROCESSO_CRIADO",
              "PROCESSO_EXCLUIDO",
              "PROCESSO_VISUALIZADO",
              "RESPONSAVEIS_ADICIONADOS",
              "RESPONSAVEIS_REMOVIDOS"
            ]
          },
          "tituloAgenda": {
            "type": "string"
          }
        },
        "title": "EventoTimelineProcessoResponse"
      },
      "ExcluirPessoasRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "example": [
              123,
              124,
              125
            ],
            "description": "IDs das pessoas a excluir (1..1000).",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "ExcluirPessoasRequest"
      },
      "ExcluirPessoasResponse": {
        "type": "object",
        "properties": {
          "excluidos": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas excluídas",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "ignorados": {
            "type": "array",
            "description": "Pessoas não processadas e seus motivos",
            "items": {
              "$ref": "#/components/schemas/PessoaIgnoradaResponse"
            }
          },
          "solicitados": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Quantidade de pessoas solicitadas"
          }
        },
        "title": "ExcluirPessoasResponse"
      },
      "ExpedienteProcessoResponse": {
        "type": "object",
        "properties": {
          "data_ciencia": {
            "type": "string"
          },
          "data_expediente": {
            "type": "string"
          },
          "data_limite": {
            "type": "string"
          },
          "destinatario": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "intimacao": {
            "type": "string"
          },
          "is_deleted": {
            "type": "boolean"
          },
          "link_expediente": {
            "type": "string"
          },
          "processo_id": {
            "type": "integer",
            "format": "int64"
          },
          "tribunal": {
            "type": "string"
          }
        },
        "title": "ExpedienteProcessoResponse"
      },
      "ExportarPublicacoesRequest": {
        "type": "object",
        "required": [
          "campos",
          "filtros"
        ],
        "properties": {
          "campos": {
            "type": "array",
            "example": [
              "NUMERO_PROCESSO",
              "DATA_PUBLICACAO",
              "SIGLA_DIARIO"
            ],
            "description": "Colunas selecionadas; Responsáveis é incluída automaticamente.",
            "items": {
              "type": "string",
              "enum": [
                "ADVOGADO_RESPONSAVEL",
                "COMARCA",
                "DATA_DISPONIBILIZACAO",
                "DATA_PUBLICACAO",
                "ESFERA_DIARIO",
                "ESTADO",
                "IA_AUDIENCIAS",
                "IA_PRAZOS",
                "IA_PROXIMOS_PASSOS",
                "IA_RESUMO",
                "INTEIRO_TEOR",
                "LIDO",
                "LINK_PUBLICACAO",
                "NOME_PESQUISADO",
                "NUMERO_PROCESSO",
                "ORGAO",
                "PROCESSO_CADASTRADO",
                "SIGLA_DIARIO",
                "UF",
                "VARA"
              ]
            }
          },
          "filtros": {
            "$ref": "#/components/schemas/FiltroExportacaoPublicacoesRequest"
          },
          "formato": {
            "type": "string",
            "example": "EXCEL",
            "description": "Formato do arquivo. Padrão: EXCEL.",
            "enum": [
              "EXCEL",
              "PDF"
            ]
          },
          "modoConteudo": {
            "type": "string",
            "example": "INTEIRO",
            "description": "Forma de exibir o conteúdo quando a coluna estiver selecionada. Padrão: INTEIRO.",
            "enum": [
              "INTEIRO",
              "PREVIA"
            ]
          }
        },
        "title": "ExportarPublicacoesRequest"
      },
      "FaseOpcaoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID da fase — é o `faseId` que o cadastro de processo envia."
          },
          "nome": {
            "type": "string",
            "example": "Conhecimento",
            "description": "Nome exibido."
          }
        },
        "title": "FaseOpcaoResponse"
      },
      "FeriadoResponse": {
        "type": "object",
        "properties": {
          "abrangencia": {
            "type": "string"
          },
          "data": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          }
        },
        "title": "FeriadoResponse"
      },
      "FichaPessoaResponse": {
        "type": "object",
        "properties": {
          "apelido": {
            "type": "string",
            "example": "João",
            "description": "Apelido ou nome curto"
          },
          "avatarUrl": {
            "type": "string",
            "description": "URL do avatar"
          },
          "camposPersonalizados": {
            "type": "array",
            "description": "Campos personalizados gravados, com rótulo e tipo de entrada",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizadoResponse"
            }
          },
          "contadores": {
            "$ref": "#/components/schemas/ContadoresResponse"
          },
          "contatos": {
            "$ref": "#/components/schemas/ContatosResponse"
          },
          "cpfCnpj": {
            "type": "string",
            "example": "000.000.000-00",
            "description": "CPF ou CNPJ como gravado"
          },
          "documentos": {
            "$ref": "#/components/schemas/DocumentosResponse"
          },
          "endereco": {
            "$ref": "#/components/schemas/EnderecoResponse"
          },
          "equipes": {
            "type": "array",
            "description": "Equipes responsáveis pela pessoa, com nome",
            "items": {
              "$ref": "#/components/schemas/VinculadoResponse"
            }
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 337155,
            "description": "ID da pessoa"
          },
          "natureza": {
            "type": "string",
            "example": "FISICA",
            "description": "Natureza da pessoa",
            "enum": [
              "FISICA",
              "JURIDICA"
            ]
          },
          "nome": {
            "type": "string",
            "example": "João da Silva",
            "description": "Nome"
          },
          "observacoes": {
            "$ref": "#/components/schemas/ObservacoesResponse"
          },
          "pessoaJuridica": {
            "$ref": "#/components/schemas/PessoaJuridicaResponse"
          },
          "responsaveis": {
            "type": "array",
            "description": "Usuários responsáveis pela pessoa, com nome",
            "items": {
              "$ref": "#/components/schemas/VinculadoResponse"
            }
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 1,
            "description": "ID do tipo no catálogo (`GET /v2/pessoas/tipos`)"
          },
          "tipoNome": {
            "type": "string",
            "example": "Cliente",
            "description": "Nome do tipo, para exibir"
          }
        },
        "title": "FichaPessoaResponse"
      },
      "FiltroExportacaoPublicacoesRequest": {
        "type": "object",
        "properties": {
          "dataDisponibilizacaoFinal": {
            "type": "string",
            "example": "2026-09-30",
            "description": "Fim inclusivo da disponibilização (yyyy-MM-dd)."
          },
          "dataDisponibilizacaoInicial": {
            "type": "string",
            "example": "2026-09-01",
            "description": "Início da disponibilização (yyyy-MM-dd)."
          },
          "dataPublicacaoFim": {
            "type": "string",
            "example": "2026-09-30",
            "description": "Fim inclusivo da publicação (yyyy-MM-dd)."
          },
          "dataPublicacaoInicio": {
            "type": "string",
            "example": "2026-09-01",
            "description": "Início da publicação (yyyy-MM-dd)."
          },
          "equipeIds": {
            "type": "array",
            "example": [
              30
            ],
            "description": "IDs das equipes do cliente.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "lido": {
            "type": "boolean",
            "description": "true: tratadas (inclui descartadas); false: pendentes; ausente/null: todas."
          },
          "numeroProcesso": {
            "type": "string",
            "example": "0001234-56.2026.8.26.0001",
            "description": "Busca textual pelo número do processo."
          },
          "processoCadastro": {
            "type": "string",
            "example": "TODOS",
            "description": "Situação de cadastro. Padrão: TODOS.",
            "enum": [
              "CADASTRADOS",
              "NAO_CADASTRADOS",
              "TODOS"
            ]
          },
          "responsavelIds": {
            "type": "array",
            "example": [
              10,
              20
            ],
            "description": "IDs dos responsáveis do cliente.",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "siglaDiario": {
            "type": "string",
            "example": "TJSPDJN",
            "description": "Sigla obtida nas opções de diários."
          },
          "somenteSemResponsaveis": {
            "type": "boolean",
            "description": "true: restringe a processos sem responsáveis; false ou ausente: não restringe."
          },
          "uf": {
            "type": "string",
            "example": "SP",
            "description": "UF do diário."
          }
        },
        "title": "FiltroExportacaoPublicacoesRequest"
      },
      "Filtros": {
        "type": "object",
        "properties": {
          "cidade": {
            "type": "string"
          },
          "cpfCnpj": {
            "type": "string"
          },
          "equipe": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "estado": {
            "type": "string"
          },
          "estadocivil": {
            "type": "string"
          },
          "genero": {
            "type": "string"
          },
          "grupo": {
            "type": "integer",
            "format": "int64"
          },
          "indicacao": {
            "type": "integer",
            "format": "int64"
          },
          "marcador": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "nome": {
            "type": "string"
          },
          "responsavel": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "tipo": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "Filtros"
      },
      "FiltrosAgendaRequest": {
        "type": "object",
        "properties": {
          "agendaAudiencias": {
            "type": "integer",
            "format": "int32",
            "description": "1 = inclui audiências no resultado",
            "x-expedit-checkbox": {
              "label": "Incluir audiências",
              "checkedValue": 1,
              "uncheckedValue": 0
            }
          },
          "agendaCompromissos": {
            "type": "integer",
            "format": "int32",
            "description": "1 = inclui compromissos no resultado",
            "x-expedit-checkbox": {
              "label": "Incluir compromissos",
              "checkedValue": 1,
              "uncheckedValue": 0
            }
          },
          "agendaDiligencia": {
            "type": "integer",
            "format": "int32",
            "description": "1 = inclui diligências no resultado",
            "x-expedit-checkbox": {
              "label": "Incluir diligências",
              "checkedValue": 1,
              "uncheckedValue": 0
            }
          },
          "agendaExpedientes": {
            "type": "integer",
            "format": "int32",
            "description": "1 = inclui expedientes no resultado",
            "x-expedit-checkbox": {
              "label": "Incluir expedientes",
              "checkedValue": 1,
              "uncheckedValue": 0
            }
          },
          "agendaItemId": {
            "type": "integer",
            "format": "int64",
            "description": "ID de um item específico da agenda; usado apenas em consultas internas de detalhe"
          },
          "agendaTarefasAtrasadas": {
            "type": "string"
          },
          "agendaTarefasCanceladas": {
            "type": "string"
          },
          "agendaTarefasCompartilhadas": {
            "type": "string"
          },
          "agendaTarefasConcluida": {
            "type": "string"
          },
          "agendaTarefasDuplocheck": {
            "type": "string"
          },
          "agendaTarefasPendentes": {
            "type": "string"
          },
          "cliente": {
            "type": "string"
          },
          "column": {
            "type": "string"
          },
          "end": {
            "type": "string",
            "example": "2026-07-31",
            "description": "Fim do período (yyyy-MM-dd)"
          },
          "equipe": {
            "type": "string"
          },
          "estado": {
            "type": "string"
          },
          "filtroData": {
            "type": "string"
          },
          "filtroVisualizacao": {
            "type": "string",
            "description": "Filtro da leitura do usuário autenticado: visualizados ou nao_visualizados",
            "enum": [
              "nao_visualizados",
              "visualizados"
            ]
          },
          "numeroProcesso": {
            "type": "string"
          },
          "ordem": {
            "type": "string",
            "description": "Ordenação da ficha do processo pela data do prazo",
            "enum": [
              "ASC",
              "DESC"
            ]
          },
          "prioridade": {
            "type": "string"
          },
          "seSouResponsavel": {
            "type": "string",
            "description": "Restringe aos compromissos do próprio usuário autenticado"
          },
          "selecionaTipoDeTarefa": {
            "type": "integer",
            "format": "int32"
          },
          "situacao": {
            "type": "integer",
            "format": "int64"
          },
          "sortField": {
            "type": "string"
          },
          "sortOrder": {
            "type": "string"
          },
          "start": {
            "type": "string",
            "example": "2026-07-01",
            "description": "Início do período (yyyy-MM-dd)"
          },
          "status": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          },
          "tribunal": {
            "type": "string"
          },
          "user": {
            "type": "string"
          },
          "userb2": {
            "type": "string"
          }
        },
        "title": "FiltrosAgendaRequest"
      },
      "GerarLinkProcessosPessoaResponse": {
        "type": "object",
        "properties": {
          "expiraEm": {
            "type": "string",
            "example": "2026-09-18T23:59:59",
            "description": "Data/hora de expiração no fuso operacional."
          },
          "token": {
            "type": "string",
            "example": "c6fe1d5d4f5d4f3d9e6f20c333dcd7e5",
            "description": "Token público do link; trate-o como credencial temporária."
          }
        },
        "title": "GerarLinkProcessosPessoaResponse"
      },
      "GrupoEmpresasResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 10,
            "description": "ID do grupo de empresas"
          },
          "nome": {
            "type": "string",
            "example": "Grupo Exemplo",
            "description": "Nome do grupo de empresas"
          }
        },
        "title": "GrupoEmpresasResponse"
      },
      "HerdarDoProcessoRequest": {
        "type": "object",
        "properties": {
          "equipes": {
            "type": "boolean",
            "example": true,
            "description": "Copia as equipes vinculadas ao processo"
          },
          "responsaveis": {
            "type": "boolean",
            "example": true,
            "description": "Copia os responsáveis vinculados ao processo"
          }
        },
        "title": "HerdarDoProcessoRequest"
      },
      "Identificacao": {
        "type": "object",
        "properties": {
          "cpf": {
            "type": "string"
          },
          "foto": {
            "type": "string"
          },
          "genero": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "nomeCompleto": {
            "type": "string"
          },
          "sobrenome": {
            "type": "string"
          }
        },
        "title": "Identificacao"
      },
      "IndicacaoRequest": {
        "type": "object",
        "required": [
          "indicacaoId"
        ],
        "properties": {
          "indicacaoId": {
            "type": "integer",
            "format": "int64",
            "example": 42,
            "description": "ID da indicação. Ids de `GET /v2/indicacoes`."
          },
          "obs": {
            "type": "string",
            "example": "Indicou na audiência de conciliação",
            "description": "Observação sobre esta indicação",
            "minLength": 0,
            "maxLength": 255
          }
        },
        "title": "IndicacaoRequest"
      },
      "IndicacaoResponse": {
        "type": "object",
        "properties": {
          "indicacaoId": {
            "type": "integer",
            "format": "int64",
            "example": 42,
            "description": "ID da indicação"
          },
          "obs": {
            "type": "string",
            "description": "Observação sobre esta indicação"
          }
        },
        "title": "IndicacaoResponse"
      },
      "LinkTemporarioArquivoResponse": {
        "type": "object",
        "properties": {
          "nome": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "title": "LinkTemporarioArquivoResponse"
      },
      "LinksTemporariosArquivosRequest": {
        "type": "object",
        "properties": {
          "arquivos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "title": "LinksTemporariosArquivosRequest"
      },
      "LinksTemporariosArquivosResponse": {
        "type": "object",
        "properties": {
          "falhas": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/LinkTemporarioArquivoResponse"
            }
          }
        },
        "title": "LinksTemporariosArquivosResponse"
      },
      "ListaArquivosResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ArquivoResponse"
            }
          }
        },
        "title": "ListaArquivosResponse"
      },
      "MarcadorVinculadoPublicacaoResponse": {
        "type": "object",
        "properties": {
          "cor": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "titulo": {
            "type": "string"
          }
        },
        "title": "MarcadorVinculadoPublicacaoResponse"
      },
      "MoverAgendaRequest": {
        "type": "object",
        "required": [
          "novaDataInicio"
        ],
        "properties": {
          "compromissosDoFluxoIds": {
            "type": "array",
            "description": "IDs dos compromissos do fluxo que devem ser recalculados junto (opcional)",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "novaDataInicio": {
            "type": "string",
            "example": "2026-07-10",
            "description": "Nova data de início da atividade principal"
          }
        },
        "title": "MoverAgendaRequest"
      },
      "ObservacoesResponse": {
        "type": "object",
        "properties": {
          "tentativasContato": {
            "type": "string",
            "description": "Tentativas de contato registradas"
          },
          "texto": {
            "type": "string",
            "description": "Observações livres"
          }
        },
        "title": "ObservacoesResponse"
      },
      "OcorrenciaResponse": {
        "type": "object",
        "properties": {
          "atividadePrincipalId": {
            "type": "integer",
            "format": "int64"
          },
          "dataFatal": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "equipesIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "fim": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "inicio": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "prioridade": {
            "type": "string"
          },
          "responsaveisIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "tipoEventoId": {
            "type": "integer",
            "format": "int64"
          },
          "titulo": {
            "type": "string"
          }
        },
        "title": "OcorrenciaResponse"
      },
      "OpcaoAtualizacaoPublicacoesResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "OpcaoAtualizacaoPublicacoesResponse"
      },
      "OpcaoCampoPersonalizadoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID da definição — é este que vai em camposPersonalizados[].campoId"
          },
          "mascara": {
            "type": "string",
            "example": "NORMAL",
            "description": "Máscara sugerida para o valor",
            "enum": [
              "CEP",
              "CNPJ",
              "CPF",
              "EMAIL",
              "LINK",
              "NORMAL",
              "TELEFONE",
              "VALOR"
            ]
          },
          "nome": {
            "type": "string",
            "example": "Origem",
            "description": "Rótulo do campo"
          },
          "opcoes": {
            "type": "array",
            "example": [
              "A",
              "B"
            ],
            "description": "Opções pré-definidas (só para seleção/escolha única/múltipla escolha)",
            "items": {
              "type": "string"
            }
          },
          "tipoEntrada": {
            "type": "string",
            "example": "MULTIPLA_ESCOLHA",
            "description": "Widget de entrada (define como renderizar/validar)",
            "enum": [
              "DATA",
              "ESCOLHA_UNICA",
              "MULTIPLA_ESCOLHA",
              "NUMERO",
              "SELECAO",
              "TEXTO",
              "TEXTO_LONGO"
            ]
          }
        },
        "title": "OpcaoCampoPersonalizadoResponse"
      },
      "PaginaResponse": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse"
      },
      "ParteProcessoResponse": {
        "type": "object",
        "properties": {
          "dt_created": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "parte": {
            "type": "string"
          },
          "processo_id": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "ParteProcessoResponse"
      },
      "Partes": {
        "type": "object",
        "properties": {
          "clientes": {
            "$ref": "#/components/schemas/Polo"
          },
          "partesContrarias": {
            "$ref": "#/components/schemas/Polo"
          }
        },
        "title": "Partes"
      },
      "PedidoProcessoResponse": {
        "type": "object",
        "properties": {
          "dataDaCondenacao": {
            "type": "string",
            "example": "2026-09-14",
            "description": "Data da condenação"
          },
          "dataDoAcordo": {
            "type": "string",
            "example": "2026-09-02",
            "description": "Data do acordo"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 16456,
            "description": "Identificador do pedido"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "example": 29880863,
            "description": "Processo ao qual o pedido pertence"
          },
          "proveitoEconomico": {
            "type": "string",
            "example": 22342.34,
            "description": "Proveito econômico, decimal com ponto"
          },
          "tipoPedido": {
            "type": "string",
            "example": "Dano Moral",
            "description": "Nome do tipo de pedido; nulo em registros antigos"
          },
          "tipoPedidoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "Identificador do tipo de pedido; nulo em registros antigos"
          },
          "valorDaCondenacao": {
            "type": "string",
            "example": 2342.34,
            "description": "Valor da condenação, decimal com ponto"
          },
          "valorDoAcordo": {
            "type": "string",
            "example": 2342.34,
            "description": "Valor do acordo, decimal com ponto"
          },
          "valorDoPedido": {
            "type": "string",
            "example": 23422.34,
            "description": "Valor do pedido, decimal com ponto"
          }
        },
        "title": "PedidoProcessoResponse"
      },
      "PeriodoRequest": {
        "type": "object",
        "required": [
          "inicio"
        ],
        "properties": {
          "fim": {
            "type": "string",
            "example": "2026-07-12",
            "description": "Data de fim (default = início)"
          },
          "horaFim": {
            "type": "string",
            "example": "10:00",
            "description": "Hora de fim"
          },
          "horaInicio": {
            "type": "string",
            "example": "09:00",
            "description": "Hora de início"
          },
          "inicio": {
            "type": "string",
            "example": "2026-07-10",
            "description": "Data de início"
          }
        },
        "title": "PeriodoRequest"
      },
      "PessoaCriadaResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "PessoaCriadaResponse"
      },
      "PessoaDetalheResponse": {
        "type": "object",
        "properties": {
          "apelido": {
            "type": "string",
            "example": "João",
            "description": "Apelido ou nome curto"
          },
          "avatarUrl": {
            "type": "string",
            "description": "URL do avatar"
          },
          "camposPersonalizados": {
            "type": "array",
            "description": "Campos personalizados gravados",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizadoResponse"
            }
          },
          "classificacao": {
            "type": "string",
            "example": "CLIENTE",
            "description": "**Deprecated** — use `tipoNome` para exibir e `tipoId` para identificar. Só é preenchido nos 8 tipos globais; tipo do escritório vem `null`."
          },
          "complementos": {
            "$ref": "#/components/schemas/ComplementosResponse"
          },
          "contatos": {
            "$ref": "#/components/schemas/ContatosResponse"
          },
          "controleAcesso": {
            "$ref": "#/components/schemas/ControleAcessoResponse"
          },
          "cpfCnpj": {
            "type": "string",
            "example": "000.000.000-00",
            "description": "CPF ou CNPJ informado"
          },
          "documentos": {
            "$ref": "#/components/schemas/DocumentosResponse"
          },
          "endereco": {
            "$ref": "#/components/schemas/EnderecoResponse"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 123,
            "description": "Identificador da pessoa"
          },
          "naturezaPessoa": {
            "type": "string",
            "example": "FISICA",
            "description": "Natureza da pessoa"
          },
          "nome": {
            "type": "string",
            "example": "João da Silva",
            "description": "Nome da pessoa"
          },
          "oab": {
            "type": "string",
            "description": "Número da OAB"
          },
          "representante": {
            "$ref": "#/components/schemas/RepresentanteResponse"
          },
          "tipoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID do tipo no catálogo (`GET /v2/pessoas/tipos`)"
          },
          "tipoNome": {
            "type": "string",
            "example": "Curador",
            "description": "Nome do tipo, para exibir"
          }
        },
        "title": "PessoaDetalheResponse"
      },
      "PessoaFalhouResponse": {
        "type": "object",
        "properties": {
          "motivo": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "PessoaFalhouResponse"
      },
      "PessoaIgnoradaResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 125,
            "description": "ID da pessoa não processada"
          },
          "motivo": {
            "type": "string",
            "description": "Motivo seguro pelo qual a pessoa foi ignorada"
          }
        },
        "title": "PessoaIgnoradaResponse"
      },
      "PessoaJuridicaResponse": {
        "type": "object",
        "properties": {
          "inscricaoEstadual": {
            "type": "string",
            "description": "Inscrição estadual"
          },
          "ramo": {
            "type": "string",
            "description": "Ramo de atividade"
          },
          "responsavel": {
            "type": "string",
            "description": "Responsável pela empresa"
          }
        },
        "title": "PessoaJuridicaResponse"
      },
      "PessoaResponse": {
        "type": "object",
        "properties": {
          "documento": {
            "type": "string",
            "example": "000.000.000-00",
            "description": "CPF ou CNPJ"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 123,
            "description": "ID da pessoa"
          },
          "nome": {
            "type": "string",
            "example": "João da Silva",
            "description": "Nome da pessoa"
          }
        },
        "title": "PessoaResponse"
      },
      "Polo": {
        "type": "object",
        "properties": {
          "advogadoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "clienteIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "testemunhaIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "tipoPolo": {
            "type": "string"
          }
        },
        "title": "Polo"
      },
      "PrazoSugeridoResponse": {
        "type": "object",
        "properties": {
          "descricao": {
            "type": "string"
          },
          "dias": {
            "type": "integer",
            "format": "int32"
          },
          "fim": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "inicio": {
            "type": "string",
            "example": "yyyy-MM-dd"
          }
        },
        "title": "PrazoSugeridoResponse"
      },
      "ProcessoEncerramentoIgnoradoResponse": {
        "type": "object",
        "properties": {
          "motivo": {
            "type": "string",
            "description": "Motivo pelo qual o encerramento ou a reabertura não foi aplicado"
          },
          "numeroProcesso": {
            "type": "string",
            "example": "1011214-58.2024.8.26.0477",
            "description": "Número do processo"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "example": 26540878,
            "description": "ID interno do processo"
          }
        },
        "title": "ProcessoEncerramentoIgnoradoResponse"
      },
      "ProcessoListagemResponse": {
        "type": "object",
        "properties": {
          "encerrado": {
            "type": "boolean",
            "example": false,
            "description": "Processo encerrado"
          },
          "grau": {
            "type": "string",
            "example": "1º Grau",
            "description": "Grau / instância; null quando o tribunal não define grau (ex.: administrativo)"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 45210,
            "description": "Id do processo"
          },
          "monitoramentoAtivo": {
            "type": "boolean",
            "example": true,
            "description": "Captura automática do tribunal ligada para este processo"
          },
          "numero": {
            "type": "string",
            "example": "0001234-96.2026.8.17.0001",
            "description": "Número do processo"
          },
          "partes": {
            "type": "string",
            "example": "ACME LTDA x João da Silva",
            "description": "Partes da captura mais recente; null se o processo nunca foi capturado"
          },
          "tribunal": {
            "type": "string",
            "example": "TJPE",
            "description": "Tribunal (descrição). Sempre preenchido: processo sem tribunal vem como \"Sem Tribunal\", e o administrativo como \"Processo Administrativo\""
          }
        },
        "title": "ProcessoListagemResponse"
      },
      "ProcessoMonitoramentoIgnoradoResponse": {
        "type": "object",
        "properties": {
          "motivo": {
            "type": "string",
            "description": "Motivo pelo qual o monitoramento não foi alterado"
          },
          "numeroProcesso": {
            "type": "string",
            "example": "1011214-58.2024.8.26.0477",
            "description": "Número do processo"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "example": 26540878,
            "description": "ID interno do processo"
          }
        },
        "title": "ProcessoMonitoramentoIgnoradoResponse"
      },
      "ProcessoRequest": {
        "type": "object",
        "required": [
          "dadosBasicos",
          "partes"
        ],
        "properties": {
          "camposPersonalizados": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizado"
            }
          },
          "controleAcesso": {
            "$ref": "#/components/schemas/ControleAcesso"
          },
          "dadosBasicos": {
            "$ref": "#/components/schemas/DadosBasicos"
          },
          "detalhesComplementares": {
            "$ref": "#/components/schemas/DetalhesComplementares"
          },
          "partes": {
            "$ref": "#/components/schemas/Partes"
          }
        },
        "title": "ProcessoRequest"
      },
      "ProcessoResponse": {
        "type": "object",
        "properties": {
          "grau": {
            "type": "string",
            "example": "1º Grau",
            "description": "Grau / instância"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 123456,
            "description": "Id do processo (passar em processoId)"
          },
          "numero": {
            "type": "string",
            "example": "0001234-56.2024.8.26.0100",
            "description": "Número do processo"
          },
          "partes": {
            "type": "string",
            "example": "João da Silva x Empresa XYZ Ltda",
            "description": "Partes do processo"
          },
          "tribunal": {
            "type": "string",
            "example": "TJSP - Tribunal de Justiça de SP",
            "description": "Tribunal (descrição amigável)"
          }
        },
        "title": "ProcessoResponse"
      },
      "ProcessoResumoResponse": {
        "type": "object",
        "properties": {
          "numeroProcesso": {
            "type": "string",
            "example": "1011214-58.2024.8.26.0477",
            "description": "Número do processo"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "example": 26540878,
            "description": "ID interno do processo"
          }
        },
        "title": "ProcessoResumoResponse"
      },
      "ProcessoSalvoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "numeroProcesso": {
            "type": "string"
          },
          "reativado": {
            "type": "boolean"
          }
        },
        "title": "ProcessoSalvoResponse"
      },
      "ProcessoVinculadoPublicacaoResponse": {
        "type": "object",
        "properties": {
          "encerrado": {
            "type": "boolean"
          },
          "equipes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipeVinculadaPublicacaoResponse"
            }
          },
          "favorito": {
            "type": "boolean"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "marcadores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarcadorVinculadoPublicacaoResponse"
            }
          },
          "monitorado": {
            "type": "boolean"
          },
          "novo": {
            "type": "boolean"
          },
          "numeroProcesso": {
            "type": "string"
          },
          "partes": {
            "type": "string"
          },
          "probabilidadeEmBaixa": {
            "type": "boolean"
          },
          "responsaveis": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResponsavelVinculadoPublicacaoResponse"
            }
          },
          "segredoJustica": {
            "type": "boolean"
          },
          "semMovimentacao": {
            "type": "boolean"
          },
          "suspenso": {
            "type": "boolean"
          },
          "tribunal": {
            "type": "string"
          },
          "tribunalId": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "ProcessoVinculadoPublicacaoResponse"
      },
      "ProcessoVinculadoResponse": {
        "type": "object",
        "properties": {
          "encerrado": {
            "type": "boolean",
            "example": false,
            "description": "Processo encerrado"
          },
          "grau": {
            "type": "string",
            "example": "1º Grau",
            "description": "Grau/instância do tribunal; null quando o tribunal não define grau (ex.: administrativo)"
          },
          "monitorado": {
            "type": "boolean",
            "example": true,
            "description": "Processo com monitoramento ativo"
          },
          "numeroProcesso": {
            "type": "string",
            "example": "1011214-58.2024.8.26.0477",
            "description": "Número do processo"
          },
          "processoId": {
            "type": "integer",
            "format": "int64",
            "example": 26540878,
            "description": "ID interno do processo"
          },
          "tribunal": {
            "type": "string",
            "example": "TJSP",
            "description": "Nome do tribunal. Sempre preenchido: processo sem tribunal vem como \"Sem Tribunal\", e o administrativo como \"Processo Administrativo\""
          },
          "vinculadoComo": {
            "type": "array",
            "example": [
              "CLIENTE",
              "ADVOGADO"
            ],
            "description": "Papéis da pessoa neste processo. Mais de um é possível (ex.: advogado que também é parte)",
            "items": {
              "type": "string",
              "enum": [
                "ADVOGADO",
                "ADVOGADO_CONTRA",
                "CLIENTE",
                "PARTE_CONTRA"
              ]
            }
          }
        },
        "title": "ProcessoVinculadoResponse"
      },
      "ProcessosArquivamentoRequest": {
        "type": "object",
        "properties": {
          "encerrar": {
            "type": "boolean",
            "example": false,
            "description": "Encerra somente processos vinculados exclusivamente à pessoa arquivada."
          },
          "removerMonitoramento": {
            "type": "boolean",
            "example": false,
            "description": "Desativa o monitoramento somente de processos vinculados exclusivamente à pessoa arquivada."
          }
        },
        "title": "ProcessosArquivamentoRequest"
      },
      "ProcessosArquivamentoResponse": {
        "type": "object",
        "properties": {
          "encerramentoIgnorado": {
            "type": "array",
            "description": "Processos cujo encerramento não foi aplicado",
            "items": {
              "$ref": "#/components/schemas/ProcessoEncerramentoIgnoradoResponse"
            }
          },
          "encerramentoSolicitado": {
            "type": "boolean",
            "example": true,
            "description": "Indica se foi solicitado o encerramento"
          },
          "monitoramentoDesativado": {
            "type": "array",
            "description": "Processos com monitoramento desativado",
            "items": {
              "$ref": "#/components/schemas/ProcessoResumoResponse"
            }
          },
          "monitoramentoIgnorado": {
            "type": "array",
            "description": "Processos cujo monitoramento não foi desativado",
            "items": {
              "$ref": "#/components/schemas/ProcessoMonitoramentoIgnoradoResponse"
            }
          },
          "monitoramentoSolicitado": {
            "type": "boolean",
            "example": true,
            "description": "Indica se foi solicitada a desativação de monitoramento"
          },
          "processosEncerrados": {
            "type": "array",
            "description": "Processos encerrados",
            "items": {
              "$ref": "#/components/schemas/ProcessoResumoResponse"
            }
          }
        },
        "title": "ProcessosArquivamentoResponse"
      },
      "ProcessosDesarquivamentoRequest": {
        "type": "object",
        "properties": {
          "reabrir": {
            "type": "boolean",
            "example": false,
            "description": "Reabre processos vinculados que estiverem encerrados."
          },
          "reativarMonitoramento": {
            "type": "boolean",
            "example": false,
            "description": "Reativa o monitoramento dos processos vinculados, respeitando o limite do plano."
          }
        },
        "title": "ProcessosDesarquivamentoRequest"
      },
      "ProcessosDesarquivamentoResponse": {
        "type": "object",
        "properties": {
          "monitoramentoIgnorado": {
            "type": "array",
            "description": "Processos cujo monitoramento não foi reativado",
            "items": {
              "$ref": "#/components/schemas/ProcessoMonitoramentoIgnoradoResponse"
            }
          },
          "monitoramentoReativado": {
            "type": "array",
            "description": "Processos com monitoramento reativado",
            "items": {
              "$ref": "#/components/schemas/ProcessoResumoResponse"
            }
          },
          "monitoramentoSolicitado": {
            "type": "boolean",
            "example": true,
            "description": "Indica se foi solicitada a reativação de monitoramento"
          },
          "processosReabertos": {
            "type": "array",
            "description": "Processos reabertos",
            "items": {
              "$ref": "#/components/schemas/ProcessoResumoResponse"
            }
          },
          "reaberturaIgnorado": {
            "type": "array",
            "description": "Processos cuja reabertura não foi aplicada",
            "items": {
              "$ref": "#/components/schemas/ProcessoEncerramentoIgnoradoResponse"
            }
          },
          "reaberturaSolicitada": {
            "type": "boolean",
            "example": true,
            "description": "Indica se foi solicitada a reabertura"
          }
        },
        "title": "ProcessosDesarquivamentoResponse"
      },
      "PublicacaoResponse": {
        "type": "object",
        "properties": {
          "childrenCount": {
            "type": "integer",
            "format": "int32"
          },
          "childrenIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "conteudoPublicacao": {
            "type": "string"
          },
          "dataDisponibilizacao": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "dataPublicacao": {
            "type": "string",
            "example": "yyyy-MM-dd"
          },
          "dataRecebimento": {
            "type": "string",
            "example": "yyyy-MM-dd'T'HH:mm:ss"
          },
          "groupState": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "lido": {
            "type": "integer",
            "format": "int32"
          },
          "nomeDiario": {
            "type": "string"
          },
          "numeroProcesso": {
            "type": "string"
          },
          "orgao": {
            "type": "string"
          },
          "processos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProcessoVinculadoPublicacaoResponse"
            }
          },
          "siglaDiario": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "statusDescricao": {
            "type": "string"
          },
          "sugestaoIa": {
            "$ref": "#/components/schemas/SugestaoIaResponse"
          },
          "termoPesquisado": {
            "type": "string"
          },
          "ultimaAcao": {
            "$ref": "#/components/schemas/UltimaAcaoPublicacaoResponse"
          },
          "vara": {
            "type": "string"
          },
          "variacoesPublicacaoExtraidas": {
            "type": "object"
          }
        },
        "title": "PublicacaoResponse"
      },
      "RecorrenciaRequest": {
        "type": "object",
        "required": [
          "quantidade",
          "tipo"
        ],
        "properties": {
          "quantidade": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Quantidade de ocorrências (1..200)",
            "minimum": 1,
            "maximum": 200,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
          },
          "tipo": {
            "type": "string",
            "example": "MENSAL",
            "description": "Tipo de recorrência",
            "enum": [
              "MENSAL",
              "SEMANAL"
            ]
          }
        },
        "title": "RecorrenciaRequest"
      },
      "RecorrenciaResponse": {
        "type": "object",
        "properties": {
          "quantidade": {
            "type": "integer",
            "format": "int32"
          },
          "tipo": {
            "type": "string"
          }
        },
        "title": "RecorrenciaResponse"
      },
      "RelacaoResponse": {
        "type": "object",
        "properties": {
          "acao": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "identificador": {
            "type": "string"
          },
          "rotulo": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          }
        },
        "title": "RelacaoResponse"
      },
      "RelacaoTimelineProcessoResponse": {
        "type": "object",
        "properties": {
          "acao": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "identificador": {
            "type": "string"
          },
          "rotulo": {
            "type": "string"
          },
          "tipo": {
            "type": "string"
          }
        },
        "title": "RelacaoTimelineProcessoResponse"
      },
      "RelacionamentoPessoasEmLoteRequest": {
        "type": "object",
        "required": [
          "acao",
          "alvo",
          "alvoIds",
          "ids"
        ],
        "properties": {
          "acao": {
            "type": "string",
            "example": "ADICIONAR",
            "enum": [
              "ADICIONAR",
              "REMOVER"
            ]
          },
          "alvo": {
            "type": "string",
            "example": "MARCADORES",
            "enum": [
              "EQUIPES",
              "MARCADORES",
              "RESPONSAVEIS"
            ]
          },
          "alvoIds": {
            "type": "array",
            "example": [
              45,
              46
            ],
            "description": "IDs dos marcadores, equipes ou responsáveis (1..100).",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "ids": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas (1..1000).",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "RelacionamentoPessoasEmLoteRequest"
      },
      "RelacionamentoPessoasEmLoteResponse": {
        "type": "object",
        "properties": {
          "ignorados": {
            "type": "array",
            "description": "Pessoas não processadas e seus motivos",
            "items": {
              "$ref": "#/components/schemas/PessoaIgnoradaResponse"
            }
          },
          "pessoasProcessadas": {
            "type": "array",
            "example": [
              123,
              124
            ],
            "description": "IDs das pessoas processadas",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "relacionamentosSolicitados": {
            "type": "integer",
            "format": "int32",
            "example": 4,
            "description": "Quantidade de pares pessoa/alvo solicitados"
          },
          "solicitados": {
            "type": "integer",
            "format": "int32",
            "example": 3,
            "description": "Quantidade de pessoas solicitadas"
          }
        },
        "title": "RelacionamentoPessoasEmLoteResponse"
      },
      "RelatorioPublicacoesSolicitadoResponse": {
        "type": "object",
        "properties": {
          "limite": {
            "type": "integer",
            "format": "int64"
          },
          "mensagem": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "totalEncontrado": {
            "type": "integer",
            "format": "int64"
          },
          "totalExportacao": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "RelatorioPublicacoesSolicitadoResponse"
      },
      "RepresentanteRequest": {
        "type": "object",
        "required": [
          "nome"
        ],
        "properties": {
          "bairro": {
            "type": "string",
            "description": "Bairro do representante"
          },
          "cep": {
            "type": "string",
            "description": "CEP do representante"
          },
          "cidade": {
            "type": "string",
            "description": "Cidade do representante"
          },
          "documento": {
            "type": "string",
            "description": "Documento do representante (livre, sem validação de formato no v1)"
          },
          "endereco": {
            "type": "string",
            "description": "Endereço do representante (string única, sem separar número/complemento)"
          },
          "estado": {
            "type": "string",
            "example": "PE",
            "description": "Estado (UF) do representante, duas letras",
            "minLength": 0,
            "maxLength": 2,
            "pattern": "^[a-zA-Z]{2}$"
          },
          "nascimento": {
            "type": "string",
            "description": "Data de nascimento do representante"
          },
          "nome": {
            "type": "string",
            "description": "Nome do representante"
          },
          "rg": {
            "type": "string",
            "description": "RG do representante"
          }
        },
        "title": "RepresentanteRequest"
      },
      "RepresentanteResponse": {
        "type": "object",
        "properties": {
          "bairro": {
            "type": "string",
            "description": "Bairro do representante"
          },
          "cep": {
            "type": "string",
            "description": "CEP do representante"
          },
          "cidade": {
            "type": "string",
            "description": "Cidade do representante"
          },
          "documento": {
            "type": "string",
            "description": "Documento do representante"
          },
          "endereco": {
            "type": "string",
            "description": "Endereço do representante"
          },
          "estado": {
            "type": "string",
            "example": "PE",
            "description": "UF do representante"
          },
          "nascimento": {
            "type": "string",
            "example": "1990-01-31",
            "description": "Data de nascimento do representante"
          },
          "nome": {
            "type": "string",
            "description": "Nome do representante"
          },
          "rg": {
            "type": "string",
            "description": "RG do representante"
          }
        },
        "title": "RepresentanteResponse"
      },
      "ResponsavelVinculadoPublicacaoResponse": {
        "type": "object",
        "properties": {
          "foto": {
            "type": "string"
          },
          "nome": {
            "type": "string"
          },
          "tribunais": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "userId": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "ResponsavelVinculadoPublicacaoResponse"
      },
      "ResumoTratamentoPublicacoesResponse": {
        "type": "object",
        "properties": {
          "grupoTratado": {
            "type": "boolean"
          },
          "percentualTratado": {
            "type": "integer",
            "format": "int32"
          },
          "qtdPendentes": {
            "type": "integer",
            "format": "int32"
          },
          "qtdTratadas": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "type": "string"
          }
        },
        "title": "ResumoTratamentoPublicacoesResponse"
      },
      "RevisorResponse": {
        "type": "object",
        "properties": {
          "tipo": {
            "type": "string"
          },
          "userId": {
            "type": "integer",
            "format": "int64"
          }
        },
        "title": "RevisorResponse"
      },
      "RevisoresRequest": {
        "type": "object",
        "properties": {
          "manualIds": {
            "type": "array",
            "description": "IDs de revisores manuais",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "RevisoresRequest"
      },
      "SalvarPedidoRequest": {
        "type": "object",
        "required": [
          "tipoPedidoId"
        ],
        "properties": {
          "aplicarCondenacaoNoProcesso": {
            "type": "boolean",
            "example": false,
            "description": "Leva o valor da condenação deste pedido para a ficha do processo, substituindo o que estiver lá. Sem efeito se o valor da condenação vier vazio: não informado não é zero."
          },
          "dataDaCondenacao": {
            "type": "string",
            "example": "2026-09-14",
            "description": "Data da condenação"
          },
          "dataDoAcordo": {
            "type": "string",
            "example": "2026-09-02",
            "description": "Data do acordo"
          },
          "proveitoEconomico": {
            "type": "string",
            "example": "22342.34",
            "description": "Proveito econômico, decimal com ponto",
            "pattern": "^$|^-?\\d+(\\.\\d{1,2})?$"
          },
          "tipoPedidoId": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "Tipo de pedido; obrigatório"
          },
          "valorDaCondenacao": {
            "type": "string",
            "example": "2342.34",
            "description": "Valor da condenação, decimal com ponto",
            "pattern": "^$|^-?\\d+(\\.\\d{1,2})?$"
          },
          "valorDoAcordo": {
            "type": "string",
            "example": "2342.34",
            "description": "Valor do acordo, decimal com ponto",
            "pattern": "^$|^-?\\d+(\\.\\d{1,2})?$"
          },
          "valorDoPedido": {
            "type": "string",
            "example": "23422.34",
            "description": "Valor do pedido, decimal com ponto",
            "pattern": "^$|^-?\\d+(\\.\\d{1,2})?$"
          }
        },
        "title": "SalvarPedidoRequest"
      },
      "SegredoWebhookEndpointResponse": {
        "type": "object",
        "properties": {
          "secretCiphertext": {
            "type": "string"
          }
        },
        "title": "SegredoWebhookEndpointResponse"
      },
      "SelecionarPessoasEmLoteRequest": {
        "type": "object",
        "properties": {
          "filtros": {
            "$ref": "#/components/schemas/Filtros"
          }
        },
        "title": "SelecionarPessoasEmLoteRequest"
      },
      "SelecionarPessoasEmLoteResponse": {
        "type": "object",
        "properties": {
          "excedeuLimite": {
            "type": "boolean"
          },
          "ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "title": "SelecionarPessoasEmLoteResponse"
      },
      "SerieRecorrenteRequest": {
        "type": "object",
        "required": [
          "frequencias",
          "termino"
        ],
        "properties": {
          "dataFinal": {
            "type": "string",
            "example": "2027-12-31",
            "description": "Obrigatória quando termino=DATA_FINAL"
          },
          "frequencias": {
            "type": "array",
            "example": [
              "SEMANAL"
            ],
            "description": "Uma frequência da série: SEMANAL ou MENSAL",
            "items": {
              "type": "string",
              "enum": [
                "MENSAL",
                "SEMANAL"
              ]
            }
          },
          "termino": {
            "type": "string",
            "example": "DATA_FINAL",
            "description": "INDEFINIDO ou DATA_FINAL",
            "enum": [
              "DATA_FINAL",
              "INDEFINIDO"
            ]
          }
        },
        "title": "SerieRecorrenteRequest"
      },
      "StreamingResponseBody": {
        "type": "object",
        "title": "StreamingResponseBody"
      },
      "SugestaoIaResponse": {
        "type": "object",
        "properties": {
          "audiencias": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AudienciaSugeridaResponse"
            }
          },
          "prazos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrazoSugeridoResponse"
            }
          },
          "proximosPassos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "resumo": {
            "type": "string"
          }
        },
        "title": "SugestaoIaResponse"
      },
      "TipoEventoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          }
        },
        "title": "TipoEventoResponse"
      },
      "TipoPedidoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "Identificador do tipo"
          },
          "nome": {
            "type": "string",
            "example": "Dano Moral",
            "description": "Nome do tipo"
          }
        },
        "title": "TipoPedidoResponse"
      },
      "TipoPessoaResponse": {
        "type": "object",
        "properties": {
          "ativo": {
            "type": "boolean",
            "example": true,
            "description": "`false` para tipo desativado: some das novas seleções, mas segue válido em quem já o usa."
          },
          "global": {
            "type": "boolean",
            "example": false,
            "description": "`true` para tipo padrão do sistema — visível a todos e somente leitura."
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 12,
            "description": "ID do tipo, usado como `tipoId` no cadastro de pessoa."
          },
          "nome": {
            "type": "string",
            "example": "Fornecedor",
            "description": "Nome exibido."
          }
        },
        "title": "TipoPessoaResponse"
      },
      "TipoVinculoResponse": {
        "type": "object",
        "properties": {
          "categoria": {
            "type": "string",
            "example": "FAMILIAR",
            "description": "Agrupamento no seletor"
          },
          "codigo": {
            "type": "string",
            "example": "PARENTAL",
            "description": "Código estável do tipo"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 3,
            "description": "ID do tipo, usado como `tipoRelacaoId` ao criar o vínculo"
          },
          "nome": {
            "type": "string",
            "example": "Pai/Mãe e Filho",
            "description": "Nome do tipo, para agrupar no seletor"
          },
          "rotuloDestino": {
            "type": "string",
            "example": "Filho(a)",
            "description": "Como se chama quem está no lado destino"
          },
          "rotuloOrigem": {
            "type": "string",
            "example": "Pai/Mãe",
            "description": "Como se chama quem está no lado origem"
          },
          "simetrica": {
            "type": "boolean",
            "example": false,
            "description": "`false` exige `papelPessoaAtual` ao criar o vínculo; `true` dispensa."
          }
        },
        "title": "TipoVinculoResponse"
      },
      "UltimaAcaoPublicacaoResponse": {
        "type": "object",
        "properties": {
          "acao": {
            "type": "string"
          },
          "antes": {
            "type": "object"
          },
          "ator": {
            "$ref": "#/components/schemas/AtorUltimaAcaoResponse"
          },
          "dataHora": {
            "type": "string",
            "example": "yyyy-MM-dd'T'HH:mm:ss"
          },
          "depois": {
            "type": "object"
          },
          "motivo": {
            "type": "string"
          }
        },
        "title": "UltimaAcaoPublicacaoResponse"
      },
      "UpdateCampoPersonalizadoRequestDTO": {
        "type": "object",
        "required": [
          "nome",
          "tipo",
          "tipoEntrada"
        ],
        "properties": {
          "mascara": {
            "type": "string",
            "enum": [
              "CEP",
              "CNPJ",
              "CPF",
              "EMAIL",
              "LINK",
              "NORMAL",
              "TELEFONE",
              "VALOR"
            ]
          },
          "nome": {
            "type": "string"
          },
          "opcoes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tipo": {
            "type": "string",
            "enum": [
              "PESSOA",
              "PROCESSO"
            ]
          },
          "tipoEntrada": {
            "type": "string",
            "enum": [
              "DATA",
              "ESCOLHA_UNICA",
              "MULTIPLA_ESCOLHA",
              "NUMERO",
              "SELECAO",
              "TEXTO",
              "TEXTO_LONGO"
            ]
          }
        },
        "title": "UpdateCampoPersonalizadoRequestDTO"
      },
      "UsuarioPerfilResponse": {
        "type": "object",
        "properties": {
          "contato": {
            "$ref": "#/components/schemas/Contato"
          },
          "datas": {
            "$ref": "#/components/schemas/Datas"
          },
          "equipes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Equipe"
            }
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "identificacao": {
            "$ref": "#/components/schemas/Identificacao"
          },
          "valorHora": {
            "type": "string"
          },
          "vinculo": {
            "$ref": "#/components/schemas/Vinculo"
          }
        },
        "title": "UsuarioPerfilResponse"
      },
      "UsuarioResumoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 1649,
            "description": "ID do usuário"
          },
          "nome": {
            "type": "string",
            "example": "Luiz Dev - Expedit",
            "description": "Nome de exibição do usuário"
          }
        },
        "title": "UsuarioResumoResponse"
      },
      "VinculadoResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 1649,
            "description": "ID"
          },
          "nome": {
            "type": "string",
            "example": "Ana Paula Ferreira",
            "description": "Nome exibido"
          }
        },
        "title": "VinculadoResponse"
      },
      "Vinculo": {
        "type": "object",
        "properties": {
          "clienteId": {
            "type": "integer",
            "format": "int64"
          },
          "nivelAcessoId": {
            "type": "integer",
            "format": "int64"
          },
          "nivelAcessoNome": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "title": "Vinculo"
      },
      "VinculoPessoaResponse": {
        "type": "object",
        "properties": {
          "categoria": {
            "type": "string",
            "example": "FAMILIAR",
            "description": "Agrupamento na ficha"
          },
          "dataFim": {
            "type": "string",
            "example": "2026-01-30",
            "description": "Fim da vigência, quando o vínculo terminou"
          },
          "dataInicio": {
            "type": "string",
            "example": "2020-03-15",
            "description": "Início da vigência"
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "example": 44,
            "description": "ID do vínculo, para editar ou remover"
          },
          "observacao": {
            "type": "string",
            "description": "Observação livre"
          },
          "pessoaId": {
            "type": "integer",
            "format": "int64",
            "example": 20,
            "description": "ID da outra pessoa"
          },
          "pessoaNome": {
            "type": "string",
            "example": "Maria da Silva",
            "description": "Nome da outra pessoa"
          },
          "relacao": {
            "type": "string",
            "example": "Filho(a)",
            "description": "Como a outra pessoa se chama neste vínculo"
          },
          "simetrica": {
            "type": "boolean",
            "example": false,
            "description": "`true` quando os dois lados têm o mesmo papel"
          },
          "tipoCodigo": {
            "type": "string",
            "example": "PARENTAL",
            "description": "Código estável do tipo"
          },
          "tipoNome": {
            "type": "string",
            "example": "Pai/Mãe e Filho",
            "description": "Nome do tipo"
          },
          "tipoRelacaoId": {
            "type": "integer",
            "format": "int64",
            "example": 3,
            "description": "ID do tipo"
          }
        },
        "title": "VinculoPessoaResponse"
      },
      "WebhookEndpointResponse": {
        "type": "object",
        "properties": {
          "eventTypes": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string"
            }
          },
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "nome": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "title": "WebhookEndpointResponse"
      },
      "PaginaResponse_AgendaItemResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgendaItemResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«AgendaItemResponse»"
      },
      "PaginaResponse_AgrupamentoPublicacoesResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AgrupamentoPublicacoesResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«AgrupamentoPublicacoesResponse»"
      },
      "PaginaResponse_AndamentoProcessoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AndamentoProcessoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«AndamentoProcessoResponse»"
      },
      "PaginaResponse_EquipeResumoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipeResumoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«EquipeResumoResponse»"
      },
      "PaginaResponse_EventoTimelineAgendaResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventoTimelineAgendaResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«EventoTimelineAgendaResponse»"
      },
      "PaginaResponse_EventoTimelineProcessoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventoTimelineProcessoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«EventoTimelineProcessoResponse»"
      },
      "PaginaResponse_ExpedienteProcessoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExpedienteProcessoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«ExpedienteProcessoResponse»"
      },
      "PaginaResponse_GrupoEmpresasResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GrupoEmpresasResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«GrupoEmpresasResponse»"
      },
      "PaginaResponse_IndicacaoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IndicacaoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«IndicacaoResponse»"
      },
      "PaginaResponse_ParteProcessoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParteProcessoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«ParteProcessoResponse»"
      },
      "PaginaResponse_PedidoProcessoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PedidoProcessoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«PedidoProcessoResponse»"
      },
      "PaginaResponse_PessoaResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PessoaResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«PessoaResponse»"
      },
      "PaginaResponse_ProcessoListagemResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProcessoListagemResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«ProcessoListagemResponse»"
      },
      "PaginaResponse_ProcessoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProcessoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«ProcessoResponse»"
      },
      "PaginaResponse_ProcessoVinculadoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProcessoVinculadoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«ProcessoVinculadoResponse»"
      },
      "PaginaResponse_PublicacaoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicacaoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«PublicacaoResponse»"
      },
      "PaginaResponse_UsuarioResumoResponse_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsuarioResumoResponse"
            }
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "perPage": {
            "type": "integer",
            "format": "int32"
          },
          "total": {
            "type": "integer",
            "format": "int64"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "title": "PaginaResponse«UsuarioResumoResponse»"
      },
      "PaginatedItemsDTO_CampoPersonalizadoResponseDTO_": {
        "type": "object",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of requested elements.",
            "items": {
              "$ref": "#/components/schemas/CampoPersonalizadoResponseDTO"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "example": 0,
            "description": "Requested page."
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "example": 10,
            "description": "Requested number of elements per page."
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "example": 2,
            "description": "Total amount of elements."
          },
          "totalPages": {
            "type": "integer",
            "format": "int32",
            "example": 1,
            "description": "Total amount of pages based on current pageSize."
          }
        },
        "title": "PaginatedItemsDTO«CampoPersonalizadoResponseDTO»"
      }
    }
  }
}
