Pular para o conteúdo

Campos Dinâmicos

No Xjur, o cadastro de um contrato não tem uma lista fixa de campos. Cada cliente configura, por tipo de contrato:

  • quais campos aparecem no cadastro;
  • quais são obrigatórios;
  • campos personalizados que só existem naquele cliente (ex.: “Tipo de Negociação”, “Código do Pedido”).

Por isso a integração não deve assumir uma lista de campos: ela consulta o Xjur e monta o payload a partir da resposta. São três rotas.

RotaPara quê
GET /contrato/tiposDescobrir o tipoContratoId
GET /contrato/tipos/{tipoContratoId}/camposSaber quais campos enviar, quais são obrigatórios e como enviar cada um
GET /contrato/catalogos/{catalogo}Obter os ids aceitos pelos campos de lista (departamento, moeda, empresa…)
GET /contrato/tipos HTTP/1.1
Authorization: Bearer <token>
X-XJUR-SUBSCRIPTION-KEY: <sua-chave>
[
{ "tipoContratoId": 1307, "nome": "Acordo de Confidencialidade", "categoria": "Contrato", "ativo": true },
{ "tipoContratoId": 1469, "nome": "Aditivo - Bonificação Postecipada - 812", "categoria": "Aditivo", "ativo": true }
]

?incluirInativos=true inclui os tipos inativos.

GET /contrato/tipos/1307/campos HTTP/1.1
Authorization: Bearer <token>
X-XJUR-SUBSCRIPTION-KEY: <sua-chave>
[
{
"nome": "ipirangaTipodeNegociacao",
"rotulo": "Tipo de Negociação",
"tipo": "Lista",
"obrigatorio": true,
"condicional": false,
"ordem": 1,
"personalizado": true,
"campoId": 12938,
"propriedade": "camposPersonalizados",
"valorEm": "opcaoId",
"suportado": true,
"opcoes": [
{ "opcaoId": 90101, "nome": "Compra" },
{ "opcaoId": 90102, "nome": "Venda" }
]
},
{
"nome": "ParteContraria",
"rotulo": "Parceira(o)",
"tipo": "Pessoa",
"obrigatorio": true,
"condicional": false,
"ordem": 6,
"personalizado": false,
"propriedade": "partesContrarias",
"suportado": true
},
{
"nome": "ObjetoContrato",
"rotulo": "Informar o motivo do compartilhamento",
"tipo": "AreaTexto",
"obrigatorio": true,
"condicional": false,
"ordem": 9,
"personalizado": false,
"propriedade": "objeto",
"suportado": true
},
{
"nome": "Departamento",
"rotulo": "Gerência Contratante",
"tipo": "Lista",
"obrigatorio": true,
"condicional": false,
"ordem": 11,
"personalizado": false,
"propriedade": "departamentoId",
"catalogo": "departamentos",
"suportado": true
},
{
"nome": "TipoDocumento",
"rotulo": "Anexo",
"tipo": "Lista",
"obrigatorio": false,
"condicional": false,
"ordem": 13,
"personalizado": false,
"suportado": false
}
]

?incluirOpcoes=false omite as opções dos campos de lista (resposta mais leve).

CampoSignificado
rotuloO nome que o usuário vê na tela do Xjur. Use-o para mapear com os campos do seu sistema
nomeNome interno do campo no Xjur (estável; bom para guardar o mapeamento)
tipoTipo do campo: Texto, AreaTexto, Lista, Data, Valor, Inteiro, Boolean, Pessoa, Empresa…
obrigatoriotrue = POST /contrato é recusado sem ele
condicionalO campo só é exigido na tela conforme o valor de outro campo. O XJUR Connect não o exige; envie quando fizer sentido
propriedadeOnde enviar o valor em POST /contrato
personalizadotrue = campo criado pelo cliente; vai em camposPersonalizados
campoId + valorEmPara campos personalizados: o id do campo e qual propriedade recebe o valor
opcoesOpções dos campos personalizados de lista — envie o opcaoId
catalogoCatálogo que lista os ids aceitos pelo campo (veja Catálogos)
suportadofalse = o campo existe na tela mas ainda não pode ser enviado pela integração (anexos, tabelas, listas múltiplas). Nunca é exigido
ajudaTexto de ajuda configurado pelo cliente, quando houver

Cada item da resposta vira um pedaço do POST /contrato:

Na resposta de /camposNo POST /contrato
"propriedade": "objeto""objeto": "Texto do objeto"
"propriedade": "departamentoId", "catalogo": "departamentos""departamentoId": 355 — id obtido em /contrato/catalogos/departamentos
"propriedade": "partesContrarias""partesContrarias": [ { ... } ] — veja Criar Contrato
"personalizado": true, "campoId": 12938, "valorEm": "opcaoId""camposPersonalizados": [ { "campoId": 12938, "opcaoId": 90101 } ]
"personalizado": true, "campoId": 882, "valorEm": "texto""camposPersonalizados": [ { "campoId": 882, "texto": "Pedido 4500012345" } ]

Informe campoId e exatamente um valor, na propriedade indicada por valorEm:

Tipo do campo no XjurvalorEmExemplo
Lista, Lista com linkopcaoId{ "campoId": 12938, "opcaoId": 90101 }
Texto, Área de texto, E-mailtexto{ "campoId": 882, "texto": "Pedido 4500012345" }
Horatexto{ "campoId": 930, "texto": "14:30" } (formato HH:mm)
Datadata{ "campoId": 915, "data": "2026-10-01" }
Valor, Percentualvalor{ "campoId": 940, "valor": 1500.50 }
Inteirointeiro{ "campoId": 951, "inteiro": 12 }
Sim/Nãobooleano{ "campoId": 960, "booleano": true }
UsuáriousuarioId{ "campoId": 970, "usuarioId": 890 }

Campos de outros tipos (lista múltipla, tabela, lista nivelada, documento, imagem, grupo de usuários) ainda não podem ser enviados — aparecem com suportado: false.

Para os campos com catalogo, consulte os ids aceitos:

GET /contrato/catalogos/departamentos?nome=jurid&pagina=1&limite=50 HTTP/1.1
{
"totalPaginas": 1,
"totalRegistros": 2,
"data": [
{ "id": 355, "nome": "Jurídico Contratos" },
{ "id": 412, "nome": "Jurídico Societário", "codigo": "JUR-SOC" }
]
}
ParâmetroDescrição
nomeFiltra por trecho do nome
paginaPágina, começando em 1
limiteItens por página. Padrão 50, máximo 200
CatálogoUsado em
departamentosdepartamentoId
moedasmoedaId
indicesindiceId
periodicidadesperiodicidadeId
tipos-vigenciatipoVigenciaId
status-contratostatusContratoId
tipos-centro-custocentrosCusto[].tipoCentroCustoId
advogados-internosadvogadosInternos[].advogadoInternoId
empresasempresas[].empresaId

Os papéis das partes contrárias e empresas (Contratante, Contratada…) vêm de GET /xsigner/papeis-signatario.

Ao receber POST /contrato, o XJUR Connect confere os campos com obrigatorio: true, condicional: false e suportado: true. Se faltar algum, responde 400 listando todos os que faltam, com o rótulo e onde enviar:

{
"codigo": "DADOS_INVALIDOS",
"descricao": "Campos obrigatórios para este tipo de contrato não informados: \"Tipo de Negociação\" (camposPersonalizados com campoId 12938, valor em opcaoId); \"Gerência Contratante\" (departamentoId). Consulte GET /contrato/tipos/1307/campos."
}
SituaçãoComportamento
Campo obrigatório e suportado não enviado400
Campo condicional não enviadoAceito — a regra depende do valor de outro campo e só é avaliada na tela do Xjur
Campo não suportadoNunca exigido
Instrumento em pasta existente (novaPasta: false)Partes contrárias, empresas, departamento e centros de custo não enviados são herdados do primeiro contrato da pasta, então não são exigidos
"validarCamposObrigatorios": falseNenhuma conferência: o contrato é criado mesmo incompleto (útil em cargas iniciais, para completar depois no Xjur)
  1. Na configuração da integração, chame GET /contrato/tipos e escolha os tipos de contrato que o seu sistema vai criar.
  2. Para cada tipo, chame GET /contrato/tipos/{id}/campos e mapeie cada rotulo para um campo do seu sistema — comece pelos obrigatorio: true.
  3. Para os campos com catalogo ou opcoes, monte um de-para entre os seus valores e os ids do Xjur.
  4. Na criação, monte o payload seguindo a coluna propriedade — veja Criar Contrato.
  5. Se receber 400 de campo obrigatório, a configuração do cliente mudou: refaça o passo 2.