Essa é uma revisão anterior do documento!
Integração IAGO × eTCE — Criação de Peças/Minutas
1. Objetivo
Este documento descreve a integração utilizada pelo IAGO para criação automática de peças no eTCE-GO / TCE-Docs, incluindo:
- endpoint utilizado;
- ambientes disponíveis;
- autenticação;
- usuário de serviço;
- contrato da requisição;
- regras para inclusão e substituição de documentos;
- validações de negócio;
- retornos HTTP;
- mensagens de validação;
- regras específicas da primeira versão da integração.
A finalidade do endpoint é permitir que uma peça produzida com apoio de Inteligência Artificial seja criada no TCE-Docs e vinculada ao último andamento do processo no setor informado.
Importante: a peça criada pelo IAGO deve ser considerada uma minuta sujeita à revisão de um servidor.
O uso do usuário de serviçoBOTMINUTApermite identificar a origem automatizada do documento.
2. Repositório da aplicação
3. Ambientes
Homologação
Swagger:
Endpoint:
POST https://api-etce.tce.gti.br/api/v1/Documento/iago
Produção
Swagger:
Endpoint:
POST https://api-etce.tce.go.gov.br/api/v1/Documento/iago
4. Endpoint
POST /api/v1/Documento/iago
Descrição
Cria o documento gerado pelo IAGO no TCE-Docs e vincula o documento ao último andamento do processo, considerando o processo, o setor informado e o usuário autenticado.
O endpoint centraliza as validações necessárias para a criação da peça.
5. Autenticação
A integração utiliza autenticação via OpenID Connect / Keycloak, com obtenção prévia de um token Bearer.
5.1. Produção
curl --location 'https://auth.tce.go.gov.br/realms/tce-go/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=iago-web' \ --data-urlencode 'username=BOTMINUTA' \ --data-urlencode 'password=<SENHA>' \ --data-urlencode 'grant_type=password'
5.2. Homologação
curl --location 'https://auth-hom.tce.go.gov.br/realms/tce-go/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=iago-web' \ --data-urlencode 'username=botminuta' \ --data-urlencode 'password=<SENHA>' \ --data-urlencode 'grant_type=password'
O token retornado deve ser enviado ao endpoint:
Authorization: Bearer <TOKEN> Content-Type: application/json
Retornos relacionados à autenticação
| HTTP | Situação |
|---|---|
401 Unauthorized | Requisição realizada sem autenticação/token válido. |
403 Forbidden | Usuário autenticado, porém sem autorização para utilização do endpoint. |
6. Usuário de serviço
O usuário recomendado para criação das peças geradas pelo IAGO é:
BOTMINUTA
O uso desse usuário permite identificar que o documento foi produzido por meio da integração com Inteligência Artificial e que deve passar por revisão de um servidor antes da continuidade do fluxo.
6.1. Regra de lotação
Uma das principais regras da integração é:
O usuário autenticado precisa estar vinculado ao setor informado na requisição.
Além disso, o processo precisa estar no setor informado para que o documento possa ser efetivamente criado e vinculado ao andamento correspondente.
Atualmente existem vinculações do usuário de serviço aos seguintes setores:
| Setor | Descrição | Usuário/vinculação |
|---|---|---|
DI-TI | Diretoria de Tecnologia da Informação | BOTMINUTA |
GPCCR | Gabinete do Procurador de Contas Carlos Gustavo Silva Rodrigues | BOTMINUTA_GPCCR |
Importante: caso a funcionalidade seja disponibilizada para novos setores, será necessário incluir o usuário de serviço no setor correspondente antes de utilizar o endpoint.
7. Contrato da requisição
Request Body
{
"setorGeralId": 26,
"conversaId": 0,
"codigoProcesso": 202400047002057,
"tipoDocumento": "DP",
"corpoDocumento": "<p>Conteúdo da minuta...</p>",
"ementa": "Ementa opcional da peça"
}
Campos
| Campo | Obrigatório | Descrição |
|---|---|---|
setorGeralId | Sim | Identificador do setor no qual o processo deverá estar e ao qual o usuário autenticado deverá estar vinculado. |
codigoProcesso | Sim | Código do processo onde a peça será criada. |
tipoDocumento | Sim | Indicador do tipo de documento. Na primeira versão da integração deve ser utilizado DP, correspondente a Parecer. |
corpoDocumento | Sim | Conteúdo da peça em HTML simples. |
conversaId | Não | Identificador da conversa do IAGO, utilizado para rastreabilidade quando informado. O valor 0 é aceito e tratado como não informado. |
ementa | Não | Ementa que será associada ao documento. Quando informada, será utilizada na criação da peça; quando omitida, a API utiliza a ementa cadastrada na autuação do processo. |
Observações sobre o contrato
- Deve ser utilizado
tipoDocumento = “DP”. - O contrato deve trabalhar com um processo por requisição.
- Recomenda-se utilizar os tipos definidos no contrato/Swagger.
corpoDocumentodeve possuir conteúdo HTML válido e conteúdo efetivo.- Tags HTML vazias não são aceitas.
8. Regra da ementa
O campo ementa é opcional.
Quando a ementa é informada
A ementa do documento será gerada utilizando o conteúdo enviado na própria requisição:
{
"ementa": "Análise da prestação de contas..."
}
8. Regra da ementa
O campo ementa da requisição é opcional.
Durante o processamento, a API também considera a ementa cadastrada na autuação do processo.
A definição da ementa do documento ocorre da seguinte forma:
- quando o campo
ementaé informado na requisição, esse conteúdo será utilizado na peça; - quando o campo
ementanão é informado, será utilizada a ementa cadastrada na autuação.
Para que a criação do documento seja concluída, o processo deve possuir ementa cadastrada na autuação.
Caso essa informação não esteja preenchida, a API retorna:
{
"title": "Processo sem ementa.",
"detail": "O documento não pode ser criado pois a EMENTA do PROCESSO deve ser cadastrada, entre em contato com Serviço de PROTOCOLO.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Campo ementa no endpoint | Ementa utilizada no documento |
|---|---|
| Informado | Conteúdo enviado na requisição |
| Não informado | Ementa cadastrada na autuação |
—-
9. Tipo de documento permitido
Na primeira versão da integração foi implementada a criação de Parecer.
O valor esperado é:
{
"tipoDocumento": "DP"
}
DP corresponde ao tipo documental Parecer.
Não devem ser enviados outros tipos documentais enquanto não forem explicitamente habilitados para a integração.
Tipo não permitido para integração com o IAGO
{
"title": "Tipo de documento não permitido.",
"detail": "Tipo de documento não permitido para integração com o Iago.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Tipo inexistente ou indisponível para o setor
Também pode ocorrer validação relacionada ao cadastro ou habilitação do tipo documental para o setor informado:
{
"title": "Parâmetro inválido",
"detail": "Não existe o tipo de documento com o indicador DP informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
10. Fluxo da operação
De forma simplificada, o endpoint executa o seguinte fluxo:
- Recebe a requisição.
- Valida a autenticação.
- Valida a autorização para utilização da API.
- Valida os campos da requisição.
- Valida a vinculação do usuário ao setor.
- Valida a existência do processo.
- Valida as condições do processo e do andamento.
- Valida o tipo documental.
- Valida as regras de segurança do processo.
- Valida a existência e o estado de documentos anteriores.
- Cria uma nova peça ou substitui uma peça anterior quando permitido.
- Cria ou atualiza o documento no TCE-Docs.
- Vincula o documento ao último andamento do processo.
- Atualiza os dados relacionados ao documento no andamento.
- Retorna os dados da operação.
11. Regras de negócio
RN01 — Processo existente
O processo informado precisa existir.
Caso contrário, a operação é interrompida.
{
"title": "Parâmetro inválido",
"detail": "Processo informado não existe.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
RN02 — Usuário vinculado ao setor
O usuário autenticado precisa estar vinculado ao setorGeralId informado.
{
"title": "Objeto informado está inválido.",
"detail": "{\r\n \"Validacoes\" : [ \r\n {\r\n \"SetorInvalido\" : \"O usuário autenticado não está vinculado ao setor informado.\"\r\n }\r\n ] \r\n}\r\n",
"typeDetail": "application/json",
"status": "Validation",
"type": "Validation",
"instance": null,
"code": "422"
}
Essa regra é válida tanto para processos comuns quanto reservados.
RN03 — Processo no setor informado
O processo deve estar no setor informado na requisição, permitindo que a peça seja vinculada ao andamento correto.
Não é permitido utilizar a integração para incluir uma peça em processo pertencente a setor para o qual o usuário de serviço não esteja devidamente vinculado.
RN04 — Processos sigilosos
Não é permitida a criação de documentos por este endpoint em processos classificados como sigilosos, mesmo que o usuário possua acesso ao processo.
{
"title": "Processo Sigiloso.",
"detail": "Não é permitida a criação de documentos no processo (2013100280472), pois ele possui caráter sigiloso.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
O número do processo apresentado na mensagem varia conforme o processo informado.
RN05 — Processos reservados
A criação é permitida em processo reservado desde que:
- o usuário de serviço esteja vinculado ao mesmo setor do processo;
- o processo esteja no setor informado;
- as demais regras de negócio sejam atendidas.
Caso o usuário não esteja vinculado ao setor informado, a requisição é rejeitada com 422.
RN06 — Ementa
A ementa utilizada no documento segue a seguinte prioridade:
ementainformada no body da requisição;- ementa cadastrada na autuação do processo.
Caso não exista uma ementa válida disponível, a criação é interrompida.
RN07 — Responsável pelo setor
Deve existir responsável cadastrado para o setor do processo.
Caso não exista responsável cadastrado, a criação da minuta será interrompida.
RN08 — Documento assinado ou aguardando assinatura
Não é permitida a substituição quando o processo já possui documento assinado ou aguardando assinatura.
{
"title": "Documento Assinado/Aguardando assinatura.",
"detail": "O processo atual já possui um documento assinado ou aguardando assinatura e não pode ser alterado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
RN09 — Documento aberto para edição no Word
Não é permitida a substituição automática quando o documento está aberto para edição.
{
"title": "Substituição automática não permitida.",
"detail": "O documento já se encontra aberto para edição no Word. A substituição automática não é permitida.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
RN10 — Substituição de documento criado pelo IAGO
Um documento criado anteriormente pelo IAGO pode ser automaticamente substituído somente quando não tiver sofrido alteração por usuário.
Nesse cenário, o endpoint retorna sucesso e:
{
"acaoExecutada": "Substituicao"
}
RN11 — Documento criado pelo IAGO e alterado por usuário
Se um documento criado pelo IAGO tiver sido posteriormente alterado por um usuário, a substituição automática não é permitida.
{
"title": "Substituição automática não permitida.",
"detail": "O documento existente foi criado pelo IAGO e possui alterações realizadas por um usuário. A substituição automática não é permitida.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
RN12 — Documento criado por usuário
Documentos originalmente criados por usuário não podem ser substituídos automaticamente pela integração.
{
"title": "Substituição automática não permitida.",
"detail": "O documento existente foi criado por um usuário. A substituição automática não é permitida.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
RN13 — Corpo do documento obrigatório
corpoDocumento é obrigatório e precisa conter conteúdo válido.
Não são aceitos:
- valor
null; - string vazia;
- conteúdo contendo somente espaços;
- HTML sem conteúdo útil;
- conteúdo em formato HTML considerado inválido pela API.
Para valor vazio ou null:
{
"title": "Parâmetro inválido",
"detail": "O corpo do documento deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
Para HTML inválido ou contendo somente tags vazias:
{
"title": "Parâmetro inválido",
"detail": "O corpo do documento informado está em um formato inválido.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
RN14 — Um processo por requisição
O endpoint deve ser utilizado para inclusão de documento em um processo por vez.
Não deve ser enviada uma lista de processos no campo codigoProcesso.
RN15 — Atualização do andamento
Após a criação do documento, o endpoint atualiza o andamento do processo, incluindo os dados utilizados para referenciar o documento gerado no TCE-Docs.
Entre os dados relacionados ao documento estão:
ID_DOCUMENT_N TIPO_DOCUMENT_A
12. Campos obrigatórios e mensagens de validação
setorGeralId
Quando não informado:
{
"title": "Parâmetro inválido",
"detail": "O setor geral do usuário deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
codigoProcesso
Quando não informado:
{
"title": "Parâmetro inválido",
"detail": "O código do processo deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
corpoDocumento
Quando vazio ou null:
{
"title": "Parâmetro inválido",
"detail": "O corpo do documento deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
conversaId
O campo não é obrigatório.
São permitidos:
- atributo não informado;
conversaId = 0.
13. Exemplo de requisição
Homologação
curl --location 'https://api-etce.tce.gti.br/api/v1/Documento/iago' \ --header 'Authorization: Bearer <TOKEN>' \ --header 'Content-Type: application/json' \ --data '{ "setorGeralId": 26, "conversaId": 0, "codigoProcesso": 202400047002057, "tipoDocumento": "DP", "corpoDocumento": "<p>Conteúdo da minuta gerada pelo IAGO.</p>", "ementa": "Ementa da peça gerada pelo IAGO" }'
Para produção utilizar:
https://api-etce.tce.go.gov.br/api/v1/Documento/iago
14. Retorno de sucesso
Criação de novo documento
{
"documentoId": 6255658,
"codigoProcesso": 201800047000443,
"tipoDocumento": "Parecer",
"dataHora": "2026-07-17T11:29:34.724411-03:00",
"nomeUsuario": "BOTMINUTA",
"acaoExecutada": "CriacaoNova"
}
Substituição permitida
{
"documentoId": 6255660,
"codigoProcesso": 201800047000443,
"tipoDocumento": "Parecer",
"dataHora": "2026-07-17T11:41:00.2380878-03:00",
"nomeUsuario": "BOTMINUTA",
"acaoExecutada": "Substituicao"
}
Campos do retorno
| Campo | Descrição |
|---|---|
documentoId | Identificador do documento criado/atualizado no TCE-Docs. |
codigoProcesso | Processo relacionado à operação. |
tipoDocumento | Descrição do tipo documental criado. |
dataHora | Data e hora da operação. |
nomeUsuario | Usuário responsável pela criação via integração. |
acaoExecutada | Informa se houve CriacaoNova ou Substituicao. |
15. Códigos HTTP
| HTTP | Situação |
|---|---|
200 OK | Documento criado ou substituído com sucesso. |
400 Bad Request | Campos ou parâmetros inválidos, processo inexistente, conteúdo obrigatório ausente, tipo cadastral inexistente etc. |
401 Unauthorized | Ausência de autenticação válida. |
403 Forbidden | Usuário autenticado sem autorização para utilizar o endpoint. |
409 Conflict | Regra de negócio impede a criação ou substituição. |
422 Unprocessable Entity | Falha de validação ou vínculo, como usuário não vinculado ao setor informado. |
500 Internal Server Error | Erro interno da aplicação. |
16. Resumo das principais validações
| Validação | Resultado |
|---|---|
| Usuário sem autenticação | 401 |
| Usuário sem permissão | 403 |
setorGeralId ausente | 400 |
| Usuário não vinculado ao setor | 422 |
codigoProcesso ausente | 400 |
| Processo inexistente | 400 |
| Processo sigiloso | 409 |
| Processo reservado no mesmo setor | Permitido, se as demais regras forem atendidas |
| Processo reservado fora do setor | 422 |
| Processo sem ementa disponível | 409 |
| Tipo diferente do permitido para integração | 409 |
| Documento assinado/aguardando assinatura | 409 |
| Documento em edição no Word | 409 |
| Documento IAGO sem alteração humana | Substituição permitida |
| Documento IAGO alterado por usuário | 409 |
| Documento criado por usuário | 409 |
corpoDocumento vazio ou null | 400 |
| HTML inválido/tags vazias | 400 |
conversaId ausente | Permitido |
conversaId = 0 | Permitido |
17. Considerações para expansão da funcionalidade
Para habilitar a criação automática de peças em novos setores, deve-se verificar no mínimo:
- lotação/vinculação do usuário de serviço no novo setor;
- permissão do usuário para utilização do endpoint;
- disponibilidade do tipo documental para o setor;
- existência de responsável cadastrado para o setor;
- regras específicas do tipo documental;
- necessidade de habilitar novos indicadores além de
DP; - adequação das regras de segurança e substituição;
- validação em ambiente de homologação antes da liberação em produção.
Enquanto não houver ampliação formal da integração, deve-se considerar a primeira versão restrita à criação de Parecer (DP).
18. Recomendações para consumo pelo IAGO
Antes de enviar a requisição:
- obter o token utilizando o usuário de serviço;
- utilizar o setor em que o processo efetivamente se encontra;
- garantir que o usuário esteja vinculado ao setor;
- utilizar
tipoDocumento = “DP”; - enviar HTML válido e não vazio em
corpoDocumento; - enviar
ementaquando o IAGO possuir uma ementa específica para a peça; - utilizar
conversaIdquando houver necessidade de rastreabilidade da interação; - tratar
409e422como respostas funcionais de regra de negócio/validação; - não realizar substituição forçada quando a API indicar alteração humana, assinatura ou edição do documento.