POST https://api-etce.tce.gti.br/api/v1/Documento/iago
==== Produção ====
Swagger:
[[https://api-etce.tce.go.gov.br/swagger/index.html|Swagger eTCE - Produção]]
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 **eTCE** 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=' \
--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=' \
--data-urlencode 'grant_type=password'
O token retornado deve ser enviado ao endpoint:
Authorization: Bearer
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,
"codigoProcesso": 202400047002057,
"tipoDocumento": "DP",
"corpoDocumento": "Conteúdo da minuta...
",
"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. |
| ''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.
* ''corpoDocumento'' deve 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 ''ementa'' nã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:
- ''ementa'' informada 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 ' \
--header 'Content-Type: application/json' \
--data '{
"setorGeralId": 26,
"conversaId": 0,
"codigoProcesso": 202400047002057,
"tipoDocumento": "DP",
"corpoDocumento": "Conteúdo da minuta gerada pelo IAGO.
",
"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 ''ementa'' quando o IAGO possuir uma ementa específica para a peça;
* utilizar ''conversaId'' quando houver necessidade de rastreabilidade da interação;
* tratar ''409'' e ''422'' como 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.
----