ApropriacaoNaoCotas
Execução batch da rotina FINA182 (Apropriação Não
Cotas) via REST. Endpoint Tier 3 — verbo no path
com prefixo underscore: /_apropriar (FINA182
nOper=3). POST único, sem GET — a rotina é batch e não
expõe state público; o efeito colateral (apropriações
geradas) é contabilizado nas tabelas auxiliares
CTK/CTJ e deve ser verificado via
relatórios padrão Protheus.
MsExecAuto com isBlind()=.T. — a rotina FINA182 não abre tela. Sucesso significa que o MsExecAuto retornou sem lMsErroAuto=.T.; pode retornar success=true mesmo se a base não tinha dados a apropriar (operação idempotente).MSBLQL. Bloqueio aplicável recai sobre as próprias tabelas contábeis (CTK/CTJ), avaliado pelo FINA182.Endpoint OAuth2
Sem credenciais? Você pode pegar o token rodando
./src/scripts/get-token.sh na biblioteca.
Vinculação com o ERP
Convenções
Operação batch sem state público. A rotina
FINA182 é processo contábil — não tem cadastro a
consultar nem entidade a expor. O endpoint provê apenas a
execução; o resultado vai para CTK/CTJ
e deve ser consultado por relatórios padrão ou ferramentas de
inspeção contábil.
Verbo no path (Tier 3). Apenas uma ação
aceita: /_apropriar (FINA182 nOper=3). Qualquer
outro segmento retorna 400 com mensagem
"Verbo invalido. Use POST /WsApropNCotas/_apropriar."
Body opcional. Todos os campos têm defaults
seguros — pode-se enviar payload vazio {}:
data assume dDataBase,
recalcular=true, mostrarLancamento=false.
O body em si é obrigatório (não pode ser vazio
ou ausente; 400 caso contrário).
Alias data / dataRef.
Os dois nomes apontam para o mesmo MV_PAR01. O endpoint procura
dataRef primeiro; se vazio, cai para data;
se ambos vazios, usa dDataBase.
Formato de data. data aceita
string ISO YYYY-MM-DD. Conversão interna usa
SToD(StrTran(cString, "-", "")); ou seja
"2026-05-16" vira SToD("20260516").
Mapeamento boolean → MV_PARxx. Os booleans
recalcular e mostrarLancamento são
convertidos para 1 (Sim) ou 2 (Não)
via If(lValor, 1, 2). Default seguro:
recalcular=true e mostrarLancamento=false.
Idempotência. Quando
recalcular=true (default), a apropriação é
idempotente — pode rodar várias vezes para a mesma data sem
duplicar efeito. O smoke test não precisa cleanup.
Status HTTP.
200 em sucesso (mesmo se base não tiver dados a
apropriar);
400 verbo inválido / body ausente / JSON malformado;
422 FINA182 rejeitou (vide message);
500 exceção não tratada.
Apropriação Não Cotas (FINA182)
Execução batch da FINA182 em modo blind — Tier 3 (verbo no path)Descrição
Dispara FINA182 em modo blind via
U_FN182Exc(aArray, 3). Mapeia os 3 campos do
body para os parâmetros MV_PAR01..03 da
rotina e devolve 200 com eco dos parâmetros
aplicados, ou 422 com a mensagem de erro do
MsExecAuto.
Status HTTP.
200— apropriação executada (mesmo se ambiente sem dados a apropriar).400— verbo inválido, body ausente ou JSON malformado.422— FINA182 rejeitou a execução.500— exceção não tratada.
Cenário
ApropriacaoRequest) —
varia apenas se a data é informada ou
herdada do dDataBase.
Request body
{} (defaults seguros).
Schema completo em
ApropriacaoRequest.
YYYY-MM-DD). Default dDataBase. Alias: dataRef.true → MV_PAR02=1.false → MV_PAR03=2.Exemplo da requisição (cenário ativo)
POST https://erpapi.jetme.com.br/api/99/01/WsApropNCotas/_apropriar Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "recalcular": true, "mostrarLancamento": false }
POST https://erpapi.jetme.com.br/api/99/01/WsApropNCotas/_apropriar Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json Accept: application/json { "data": "2026-05-16", "recalcular": true, "mostrarLancamento": false }
Respostas
RespostaSucesso com eco dos parâmetros aplicados.message).Exemplo de resposta
{
"success": true,
"message": "Apropriacao executada com sucesso.",
"data": {
"dataRef": "20260516",
"recalcular": true,
"mostrarLancamento": false
}
}
Schemas
Definições canônicas — parâmetros MV_PARxx da rotinaFINA182
YYYY-MM-DD. Default dDataBase.data; quando ambos vêm, dataRef prevalece.true → 1.false → 2.200. data
traz eco dos parâmetros aplicados (formato AAAAMMDD para
a data) — útil para o consumidor confirmar qual data foi
usada quando o body veio vazio.
true em 200.400 / 422 /
500.
false em erro.Cenários
Catálogo de combinações reconhecidas pela ação/_apropriar.
dDataBase) e mantém
recalcular=true /
mostrarLancamento=false.
Quando usar: job batch agendado, acerto periódico, smoke test idempotente.
Pré-condições: nenhuma — operação segura mesmo se a base não tiver dados a apropriar (a rotina responde
200 sem efeito).
Resultado: 200 OK com eco dos parâmetros aplicados.
true.false.dDataBase do AppServer.
Quando usar: reprocessamento retroativo após acerto contábil; apropriação prospectiva para fechamento futuro.
Pré-condições: data informada deve estar dentro do exercício contábil aberto.
Resultado: 200 OK com
dataRef
ecoando o valor utilizado.
YYYY-MM-DD.true.false.Pendências conhecidas (rev1)
Sucesso não implica efeito. O endpoint
responde 200 quando o MsExecAuto
retorna sem lMsErroAuto=.T.. Isso inclui o caso
em que a base não tem dados a apropriar — a
rotina executa silenciosamente sem gravar nada. Não há, hoje,
como saber pela resposta REST quantas linhas foram criadas em
CTK/CTJ. Evolução: retornar
data.linhasGravadas via consulta posterior na
CTK por data/filial.
Sem GET de inspeção. A rotina não expõe
state público — não há endpoint para listar apropriações
existentes nem desfazer uma rodada. Verificação manual via
relatórios padrão Protheus ou consulta direta nas tabelas
CTK/CTJ. Avaliar GET
_status?data=YYYY-MM-DD em revisão futura.
Smoke test pode reportar WARN em ambiente vazio.
O test-apropriacao-nao-cotas.sh passa em ambientes
sem dados a apropriar (a resposta ainda é 200 com
success=true), mas o efeito esperado não pode ser
observado. Idealmente, criar fixture mínima em
CN9/CNE (contrato + medição) antes do
smoke, em sessão dedicada de fixture-builder.
Sem distinção de filial cruzada. A FINA182
opera sobre a filial implícita do AppServer (cFilAnt);
o endpoint não aceita um parâmetro de filial alvo. Para
processar várias filiais, chamar o endpoint N vezes apontando
para URLs /api/{empresa}/{filial} distintas.