ContaContabil
CRUD de conta contábil (tabela CT1) via FwLoadModel
da rotina automática CTBA020. A chave natural é
CT1_CONTA (alfanumérica, fornecida pelo cliente no path) —
diferente dos cadastros mestre/loja, esta tabela não usa sequência
gerada pelo Protheus. Hierarquia entre contas é inferida pelo prefixo
do CT1_CONTA; o campo CT1_CCSUP não deve ser
enviado no payload (ver convenções).
Endpoint OAuth2
Sem credenciais? Você pode pegar o token rodando
./src/scripts/get-token.sh na biblioteca e
colar o access_token aqui no campo de refresh
(ou clique em "Logout" para limpar e voltar ao fake).
Vinculação com o ERP
Convenções
Paths verb-based para CRUD mutável. Por herança do
padrão TOTVS para Conta Contábil, as rotas de inclusão, alteração e
exclusão usam segmento verbal explícito:
/INCLUIR/{conta}, /ALTERAR/{conta},
/EXCLUIR/{conta}. Já o GET segue REST puro
(/{conta}, /_list, /_byid).
Não envie CT1_CCSUP no payload. Em build
240223P, CTBA020 retorna 500
quando o payload contém CT1_CCSUP — mesmo com valor
consistente. A hierarquia é resolvida pelo prefixo do
CT1_CONTA; o campo continua retornado no GET, mas é
tratado como read-only pelo endpoint.
Bloqueio simples via CT1_BLOQ. Diferente
dos cadastros mestre/loja (SA1/SA2/SB1), esta tabela não usa o
par TOTVS-padrão MSBLQL/MSBLQD. O bloqueio é
um único campo: "1"=Bloqueado, "2"=Desbloqueado.
Não há "caminho de desbloqueio" privilegiado — qualquer PUT pode
alterar o flag junto com outros campos.
Formato de datas. CT1_DTEXIS e
CT1_DTEXSF no payload aceitam string ISO
YYYY-MM-DD; string vazia é equivalente a "sem data".
Conversão interna usa sToD(StrTran(…, "-", "")).
Paginação e delta-sync. /_list usa
page/pageSize (default 50, máx
500). Para sincronização incremental, alterne para
orderBy=recno e use since/cursor
conforme o nextCursor retornado.
ContaContabil
CRUD por código da conta (CT1_CONTA)Descrição
Retorna a conta contábil identificada por CT1_CONTA.
Aplica filtro de filial (xFilial("CT1")) e respeita o
whitelist de CAMPOS_GET definido no .prw.
O parâmetro opcional fields reduz o conjunto
retornado.
Path parameter
Query parameters
CAMPOS_GET.Cenarios
Exemplo da requisicao (cenario ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsContaContabil/ZTEST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsContaContabil/ZTEST001?fields=CT1_CONTA,CT1_DESC01,CT1_BLOQ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: ContaContabil }.conta vazio ou fields com campo fora do whitelist. Tier: validation-error.Descrição
Inclui nova conta contábil via CTBA020 em modo
3 (MODEL_OPERATION_INSERT). A chave
CT1_CONTA é fornecida pelo cliente no path — esta
tabela não usa GetSXENum.
- Whitelist de campos: ver
ContaContabilPayload. CT1_CCSUPnão deve ser enviado (ver convenções).- Antes do
FwLoadModel, fazDbSeekemCT1para detectar conflito (retorna 409).
Path parameter
Request body
CAMPOS_ALLOW. Schema completo em
ContaContabilPayload.
POST https://erpapi.jetme.com.br/api/99/01/WsContaContabil/INCLUIR/ZTEST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CT1_DESC01": "CONTA ZTEST INCLUSAO", "CT1_CLASSE": "1", "CT1_NORMAL": "1", "CT1_BLOQ": "2" }
POST https://erpapi.jetme.com.br/api/99/01/WsContaContabil/INCLUIR/ZTEST002 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CT1_DESC01": "CONTA ZTEST VIGENCIA", "CT1_CLASSE": "2", "CT1_NORMAL": "2", "CT1_BLOQ": "2", "CT1_GRPVEN": "001", "CT1_DTEXIS": "2026-01-01", "CT1_DTEXSF": "2026-12-31" }
Respostas
CrudResponse com data contendo o CT1_CONTA persistido.conta vazio ou payload inválido (JSON malformado, campo fora do whitelist). Tier: validation-error.CT1_CONTA. Tier: business-error.CTBA020 rejeitou (enum inválido, classe analítica sem hierarquia consistente, datas inconsistentes). Tier: business-error.CT1_CCSUP presente no payload (não enviar).Descrição
Altera campos da conta via CTBA020 em modo
4 (MODEL_OPERATION_UPDATE). Aceita
qualquer subconjunto do whitelist CAMPOS_ALLOW; campos
ausentes preservam o valor atual.
Bloqueio. CT1_BLOQ pode ser
alterado livremente como qualquer outro campo — não há caminho
de desbloqueio privilegiado como em SA1/SA2 (esta tabela não usa
o par TOTVS MSBLQL/MSBLQD).
Path parameter
Request body
CT1_CCSUP.
PUT https://erpapi.jetme.com.br/api/99/01/WsContaContabil/ALTERAR/ZTEST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CT1_DESC01": "CONTA ZTEST ALTERADA", "CT1_BLOQ": "2" }
PUT https://erpapi.jetme.com.br/api/99/01/WsContaContabil/ALTERAR/ZTEST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CT1_BLOQ": "1" }
PUT https://erpapi.jetme.com.br/api/99/01/WsContaContabil/ALTERAR/ZTEST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CT1_DTEXSF": "2025-12-31", "CT1_BLOQ": "1" }
Respostas
CrudResponse.CTBA020 rejeitou (enum, datas, hierarquia). Tier: business-error.CT1_CCSUP no payload).Descrição
Exclui a conta contábil via CTBA020 em modo
5 (MODEL_OPERATION_DELETE). O
FwLoadModel rejeita exclusão quando a conta tem
lançamentos contábeis vinculados ou é referenciada como conta
superior de outra conta.
Path parameter
Cenario
Exemplo da requisicao (cenario ativo)
DELETE https://erpapi.jetme.com.br/api/99/01/WsContaContabil/EXCLUIR/ZTEST001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
CrudResponse.conta ausente. Tier: validation-error.Descrição
Busca a conta por id técnico — útil para integrações que persistem
a chave interna (recno) ou o identificador universal
(msuid) e querem reconfirmar o registro sem reconstruir
o CT1_CONTA.
Query parameters
recnomsuidtipo=recno, string quando tipo=msuid).CAMPOS_GET.Cenarios
Exemplo da requisicao (cenario ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsContaContabil/_byid?tipo=recno&valor=1234 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsContaContabil/_byid?tipo=msuid&valor=9f7a3e2c4b8d1a0e Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: ContaContabil }.tipo/valor ausentes ou tipo fora do enum.msuid requer CT1_MSUID no dicionário; ausente neste ambiente.Listagem
Listagem paginada e delta-syncDescrição
Lista contas com filtros por cod (prefixo de
CT1_CONTA) ou desc (prefixo de
CT1_DESC01 normalizado, sem acento). Suporta dois
modos de ordenação:
orderBy=chave(default) — paginação porpage/pageSize;sincefiltraRecNo >= sinceinline.orderBy=recno— delta-sync; usacursore devolvenextCursor.
Query parameters
CT1_CONTA.CT1_DESC01 normalizado (sem acento, uppercase).CAMPOS_GET.1).50, máx 500).chave.chaverecnoRecNo >= since) em orderBy=chave.RecNo > cursor) em orderBy=recno.Cenarios
Exemplo da requisicao (cenario ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsContaContabil/_list?cod=1&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsContaContabil/_list?orderBy=recno&cursor=0&pageSize=200 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
data (array de ContaContabil), orderBy, page, pageSize, count, opcionalmente nextCursor.orderBy inválido, pageSize > 500).Schemas
Definições canônicas — campos com origemSX3 rastreável
/{conta},
/_list, /_byid). Campos efetivamente
retornados dependem de CAMPOS_GET e do filtro
fields.
"1"=Sintética, "2"=Analítica.12"1"=Devedora, "2"=Credora.12"1"=Bloqueado, "2"=Desbloqueado (sem par TOTVS MSBLQL/MSBLQD).12CT1_CONTA; não deve ser enviado no payload (CTBA020 retorna 500).MS_UID (presente apenas se CT1_MSUID existir no dicionário).msuid.POST e PUT. Whitelist
definida em CAMPOS_ALLOW. CT1_CCSUP está
propositadamente fora — enviar provoca 500 no CTBA020
da build 240223P.
"1"=Sintética, "2"=Analítica.12"1"=Devedora, "2"=Credora.12"1"=Bloqueado, "2"=Desbloqueado. CTBA020 rejeita valores fora do domínio.12YYYY-MM-DD ou vazia.YYYY-MM-DD ou vazia.data
traz o CT1_CONTA persistido em POST e string vazia ou
objeto auxiliar em PUT/DELETE.
true em respostas de sucesso.CT1_CONTA persistido. Em PUT/DELETE pode ser string vazia.data pode conter o token
interno da causa (ex: mensagem do NomeAutoLog em falhas do
FwLoadModel) para tratamento programático.
false em erros.FwLoadModel).Cenarios
Combinacoes documentadas (1 por example doopenapi.yaml)
CT1_CONTA. Resposta inclui CT1_CCSUP (hierarquia inferida pelo prefixo).CT1_CLASSE="2") com obrigatorios: CT1_DESC01, CT1_CLASSE, CT1_NORMAL, CT1_BLOQ. Nao enviar CT1_CCSUP. Tier happy-path-minimal.CT1_DTEXIS/CT1_DTEXSF) + classificacao normal/inversa. Sem CT1_CCSUP — a hierarquia e inferida pelo prefixo de CT1_CONTA. Tier happy-path-realistic.CT1_DESC01; demais campos preservados.CT1_BLOQ; sem caminho privilegiado (CT1 nao tem par MSBLQL/MSBLQD).CT1_DTEXSF) — caminho usual para encerrar conta antes da data original.CTBA020 op=5. Falha 422 se a conta tiver lancamentos contabeis.recno da CT1 — caminho recomendado e funcional.CT1_MSUID no SX3). Ver Pendencias.page/pageSize em orderBy=chave. Combinavel com filtro cod (navega hierarquia por niveis) ou desc. Default 50, maximo 500.recno; cliente itera via nextCursor ate vazio.Pendências conhecidas (rev3)
CT1_CCSUP no payload causa 500 no CTBA020. Memoria documentada (ct1-ccsup-500): qualquer valor enviado em CT1_CCSUP via POST faz o MsExecAuto abortar com erro nao-mapeado retornado como 500. Workaround: omitir o campo — a hierarquia e inferida pelo prefixo de CT1_CONTA apos a gravacao. Para POST somente leitura via GET o campo aparece corretamente preenchido.
GET _byid?tipo=msuid retorna 501. A CT1 nesta base nao expoe CT1_MSUID/CT1_MSUIDT no SX3. Workaround: tipo=recno.
Bloqueio TOTVS-padrao nao implementado. O wrapper ainda nao chama U_C980Blq("CT1"); padrao MSBLQL/MSBLQD nao se aplica (campo unico CT1_BLOQ).
Sem _search. Autocomplete usa /_list?desc=<prefixo> com pageSize=10.
Hierarquia CT1_GRPVEN nao validada. O campo e gravado como recebido; nao ha DbSeek para confirmar existencia do grupo de vendas.