CentroCusto
CRUD de Centro de Custo (tabela CTT) via
MsExecAuto do CTBA030. A chave externa é
a própria chave técnica CTT_CUSTO — alfanumérica, com
até 9 caracteres, fornecida pelo cliente (não há
geração por GetSXENum). Datas em formato ISO
YYYY-MM-DD em entrada e saída.
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
Identificador externo. Todas as rotas
/WsCentroCusto/{custo} usam CTT_CUSTO
diretamente — alfanumérico, máximo 9 caracteres, sem espaços. Não há
chave técnica separada (não há GetSXENum); o cliente
fornece o código e é responsável pela unicidade — colisão retorna
409.
Bloqueio (CTT_BLOQ). Diferente do padrão TOTVS
*_MSBLQL/*_MSBLQD, a CTT usa o campo nativo
CTT_BLOQ: "1"=Bloqueado, "2"=Desbloqueado.
O bloqueio é editorial — o endpoint apenas grava o valor; a regra de
negócio sobre o que fazer com um centro bloqueado fica nas rotinas
consumidoras (contabilização, rateio, etc).
Classe e hierarquia. CTT_CLASSE
"1"=Sintética (agrupa filhos, não recebe lançamento),
"2"=Analítica (folha, recebe lançamento). O campo
opcional CTT_CCSUP aponta para o centro pai. Em
inclusões raiz, deixar CTT_CCSUP="".
Formato de datas. CTT_DTEXIS (início
de existência) e CTT_DTEXSF (fim de existência) aceitam
string ISO YYYY-MM-DD. No GET o campo é serializado pelo
mesmo formato. Não use DD/MM/YYYY — é rejeitado na
conversão para tipo Date.
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.
CentroCusto
CRUD por código (CTT_CUSTO)Descrição
Retorna o centro de custo pesquisado por CTT_CUSTO.
Aplica filtro de filial (xFilial("CTT")) e respeita o
whitelist de CAMPOS_GET definido no .prw.
O parâmetro opcional fields reduz o conjunto de campos
retornados.
Path parameter
Query parameters
CAMPOS_GET.Cenarios
Exemplo da requisicao (cenario ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/ZTEST___?fields=CTT_CUSTO,CTT_DESC01,CTT_BLOQ,CTT_CCSUP Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: CentroCusto }.Descrição
Inclui um centro de custo novo via CTBA030 em modo
3. A chave CTT_CUSTO vem do path — o
consumidor é responsável pela unicidade. Colisão com registro
existente retorna 409.
- Whitelist de campos: ver
CentroCustoPayload. - O segmento literal
INCLUIRé exigido pelaWSSYNTAXdo build 240223P; sem ele o roteador devolve 404.
Path parameter
Request body
CAMPOS_ALLOW. Schema completo em
CentroCustoPayload.
POST https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/INCLUIR/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CTT_CLASSE": "2", "CTT_BLOQ": "2" }
POST https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/INCLUIR/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CTT_DESC01": "CENTRO CUSTO ZTEST", "CTT_CLASSE": "2", "CTT_NORMAL": " ", "CTT_BLOQ": "2", "CTT_DTEXIS": "1980-01-01", "CTT_DTEXSF": "2029-12-31", "CTT_CCSUP": "" }
Respostas
CrudResponse com data = { CTT_CUSTO }.CTT_CUSTO já existe. Tier: business-error.MsExecAuto do CTBA030 (enum inválido, CTT_CCSUP inexistente, classe incoerente com hierarquia, etc). Tier: business-error.Descrição
Altera campos do centro de custo via CTBA030 em
modo 4. Aceita qualquer subconjunto do whitelist
CAMPOS_ALLOW.
Bloqueio. Diferente de cadastros que usam o
par *_MSBLQL/*_MSBLQD, a CTT expõe apenas
CTT_BLOQ ("1"=Bloqueado, "2"=Desbloqueado).
O PUT aceita alterar CTT_BLOQ livremente — não há
"caminho de desbloqueio exclusivo" como em SA1.
Path parameter
Request body
CTT_CUSTO nunca entra no body — é imutável (vem do path).
PUT https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/ALTERAR/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CTT_DESC01": "CENTRO CUSTO ZTEST ALTERADO", "CTT_BLOQ": "2" }
PUT https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/ALTERAR/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CTT_BLOQ": "1" }
PUT https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/ALTERAR/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "CTT_CCSUP": "ADMIN____" }
Respostas
CrudResponse.MsExecAuto (campo fora do whitelist, enum inválido, CTT_CCSUP inexistente). Tier: business-error.Descrição
Exclui o centro de custo via CTBA030 em modo
5. O MsExecAuto rejeita exclusão de
centro de custo com filhos (referenciado por outro como
CTT_CCSUP) ou com lançamentos contábeis vinculados.
Path parameter
Cenario
Exemplo da requisicao (cenario ativo)
DELETE https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/EXCLUIR/ZTEST___ Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
CrudResponse.Descrição
Busca o centro de custo por id técnico — útil para integrações
que persistem recno ou msuid e querem
reconfirmar o registro sem reconstruir o código. tipo=msuid
faz scan-full em CTT_MSUID (sem índice nativo) e
retorna 501 em ambientes sem o campo opcional.
Query parameters
recnomsuidtipo=recno, string quando tipo=msuid).CAMPOS_GET a retornar.Cenarios
Exemplo da requisicao (cenario ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/_byid?tipo=recno&valor=1234 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/_byid?tipo=msuid&valor=9f7a3e2c4b8d1a0e Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
{ success: true, data: CentroCusto }.tipo/valor ausentes ou tipo fora do enum.msuid requer o campo opcional CTT_MSUID ausente no dicionário deste ambiente.Listagem
Listagem paginada com delta-syncDescrição
Lista centros de custo com filtros por cod (prefixo
de CTT_CUSTO) ou desc (prefixo de
CTT_DESC01, normalizado sem acento). Dois modos de
ordenação:
orderBy=chave(default) — paginação porpage/pageSize.orderBy=recno— delta-sync, usasince/cursorcomnextCursorretornado.
Query parameters
CTT_CUSTO.CTT_DESC01 (normalizado sem acento, uppercase).CAMPOS_GET.1, mínimo 1).50, máx 500).chave.chaverecnoorderBy=chave (RecNo >= since).nextCursor (válido com orderBy=recno).Cenarios
Exemplo da requisicao (cenario ativo)
GET https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/_list?desc=CENTRO&page=1&pageSize=50 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
GET https://erpapi.jetme.com.br/api/99/01/WsCentroCusto/_list?orderBy=recno&cursor=0&pageSize=200 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Accept: application/json
Respostas
data (array de CentroCusto), page, pageSize, count, orderBy e opcionalmente nextCursor.orderBy inválido, pageSize > 500).Schemas
Definições canônicas — campos com origemSX3 rastreável
/{custo},
/_list, /_byid). Campos efetivamente
retornados dependem de CAMPOS_GET e do filtro
fields. CTT_MSUID/CTT_MSUIDT
são opcionais — só aparecem quando o dicionário do ambiente expõe
o campo.
"1"=Sintética (agrupa, não recebe lançamento), "2"=Analítica (folha, recebe lançamento).12" "=Nenhum, "1"=Receita, "2"=Despesa. 12"1"=Bloqueado, "2"=Desbloqueado. Não é o par TOTVS *_MSBLQL/*_MSBLQD.12YYYY-MM-DD.YYYY-MM-DD.CTT_CUSTO). Vazio = raiz.CTT_MSUID (quando exposto no dicionário).msuid.POST e PUT.
Whitelist definida em CAMPOS_ALLOW no .prw.
CTT_CUSTO não entra no body — é
imutável (vem do path no POST e PUT, é a chave da identificação).
"1"=Sintética, "2"=Analítica.12" "=Nenhum, "1"=Receita, "2"=Despesa. 12"1"=Bloqueado, "2"=Desbloqueado. Sem caminho de desbloqueio exclusivo — pode ser alterado em qualquer PUT.12YYYY-MM-DD.YYYY-MM-DD.CTT_CUSTO existente com CTT_CLASSE="1". Vazio para raiz.data
traz a chave gravada (POST) ou objeto vazio (PUT/DELETE).
true em respostas de sucesso.{ "CTT_CUSTO": "ZTEST___" }. Em PUT/DELETE pode ser objeto vazio.data pode conter o
token interno da causa (ex: mensagem do NomeAutoLog do
CTBA030) para tratamento programático.
false em erros.MsExecAuto).Cenarios
Combinacoes documentadas (1 por example doopenapi.yaml)
CTT_CUSTO. Resposta inclui o whitelist completo de CAMPOS_GET.CTT_CLASSE="2") com obrigatorios: CTT_DESC01, CTT_CLASSE, CTT_BLOQ. Sem hierarquia (sem CCSUP). Tier happy-path-minimal.CTT_DTEXIS/CTT_DTEXSF) e CTT_CCSUP apontando para CC superior. Espelha fixture canonica. Tier happy-path-realistic.CTT_DESC01; demais campos preservados.CTT_BLOQ; sem caminho privilegiado (CTT nao tem par MSBLQL/MSBLQD).CTT_DTEXSF) ou move hierarquia (CTT_CCSUP) — caminhos usuais de manutencao do plano.CTBA030 op=5. Falha 422 se CC tiver lancamentos vinculados.recno da CTT — caminho recomendado e funcional.CTT_MSUID (sem indice); retorna 501 se o campo nao existir no SX3.page/pageSize em orderBy=chave. Combinavel com filtros cod/desc. Default 50, maximo 500.recno; cliente itera via nextCursor ate vazio.Pendências conhecidas (rev3)
GET _byid?tipo=msuid pode retornar 501. A tabela CTT desta base pode nao expor CTT_MSUID/CTT_MSUIDT no SX3 — o caminho msuid responde 501. Workaround: tipo=recno.
Bloqueio TOTVS-padrao nao implementado. O wrapper U_CT030Exc ainda nao chama U_C980Blq("CTT"); PUT em registro bloqueado nao e barrado por regra externa. Padrao MSBLQL/MSBLQD nao se aplica (campo unico CTT_BLOQ).
Sem _search. Autocomplete usa /_list?desc=<prefixo> com pageSize=10.
Hierarquia CCSUP/CCLP/CCPON nao validada. Os campos sao gravados como recebidos; nao ha DbSeek para confirmar existencia do CC superior.