DocFiscalSaida
Inclusão / exclusão de Nota Fiscal de Saída (cabeçalho SF2 + itens
SD2) via wrapper MATA920 (MsExecAuto).
Métodos expostos: POST, DELETE e GET. F2_DOC é a chave
de negócio no path. Não há PUT — alteração de NF emitida é
exclusivamente pela rotina MATA920 do ERP.
C5_MSBLQL). O bloqueio relevante mora em SA1
(cliente, via U_C980Blq) e SB1 (produto). Validação acontece no
wrapper U_MT920Exc — tentativa de incluir com cliente ou produto
bloqueado retorna 422 com a mensagem do MsExecAuto.
Vinculação com o ERP
Convenções
Envelope canônico. Toda resposta usa
{ success: bool, message: string, data: object|string }.
Erros têm success=false + message com causa;
sucessos retornam o F2_DOC em data.F2_DOC.
Chave no path. POST e DELETE usam
{chave} como path-param (F2_DOC, até 6 chars,
padding via PadR).
Datas em ISO. F2_EMISSAO e
C6_ENTREG aceitam tanto AAAAMMDD
quanto YYYY-MM-DD — conversão interna usa
SToD(StrTran(v,"-","")).
Sem PUT. WsSF2 expõe apenas POST, DELETE e GET. Alteração de NF emitida deve ser feita pela rotina MATA920 do ERP.
Whitelist de campos. Cabeçalho aceita apenas
F2_TIPO, F2_CLIENTE, F2_LOJA, F2_COND, F2_EMISSAO, F2_ESPECIE,
F2_SERIE, F2_CHVNFE. Itens aceitam D2_COD, D2_QUANT,
D2_PRCVEN, D2_TES, D2_LOCAL, D2_PEDIDO, D2_ITEMPC. Campos
fora dessa lista são ignorados.
Documento Fiscal de Saída — mutação
Inclusão / exclusão via MATA920 (sem PUT).Descrição
Inclui NF de saída em SF2/SD2.
{chave} (F2_DOC) deve ser único — duplicidade retorna
409. Cliente em SA1 e produto(s) em
SB1 são validados antes da chamada ao MATA920;
falhas viram 422 com a mensagem do GetAutoGRLog.
Path parameter
F2_DOC. Padding com espaço à
direita até TamSX3('F2_DOC')[1].
Cenário
Request body
{ cabecalho: {...}, itens: [...] }. Schema
em DocFiscalSaidaPayload.
SA1.
"01" quando omitido.
SE4).
YYYY-MM-DD ou AAAAMMDD.
SB1).
MATA920 busca da
tabela de preços.
SF4). Quando omitido, MATA920 resolve via
matriz de TES da venda.
POST https://erpapi.jetme.com.br/api/99/01/WsDocFiscalSaida/INCLUIR/NF000001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json { "cabecalho": { "F2_CLIENTE": "NF000001" }, "itens": [ { "D2_COD": "P0001", "D2_QUANT": 10 } ] }
POST https://erpapi.jetme.com.br/api/99/01/WsDocFiscalSaida/INCLUIR/NF000001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs… Content-Type: application/json { "cabecalho": { "F2_TIPO": "N", "F2_CLIENTE": "NF000001", "F2_LOJA": "01", "F2_COND": "001", "F2_EMISSAO": "2026-05-17", "F2_SERIE": "API_TESTE" }, "itens": [ { "D2_COD": "P0001", "D2_QUANT": 5, "D2_PRCVEN": 120.00, "D2_TES": "501", "D2_LOCAL": "01" }, { "D2_COD": "P0002", "D2_QUANT": 2, "D2_PRCVEN": 350.00, "D2_TES": "501" } ] }
Respostas
data.F2_DOC retorna o número informado no path.MATA920 (TES não encontrado, condição inválida, regra de bloqueio).Descrição
Exclui a NF de saída. O endpoint reconstrói o array de itens mínimo
(D2_ITEM + D2_COD) a partir do SD2
e passa para MATA920 op=5. NFs com liberação ativa
ficam barradas pelo MATA920 → 422.
Cenário
Exemplo
DELETE https://erpapi.jetme.com.br/api/99/01/WsDocFiscalSaida/EXCLUIR/NF000001 Authorization: Bearer eyJhbGciOiJIUzI1NiIs…
Respostas
Consulta
Consulta por número, listagem paginada e typeahead.Descrição
Devolve cabeçalho e itens da NF em
data.{cabecalho,itens}. 404 quando o número não existe.
Cenário
Exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsDocFiscalSaida/NF000001
{
"success": true,
"data": {
"cabecalho": {
"F2_DOC": "NF000001",
"F2_CLIENTE": "NF000001",
"F2_LOJA": "01",
"F2_EMISSAO": "20260517"
},
"itens": [
{ "D2_ITEM": "01", "D2_COD": "P0001", "D2_QUANT": 10 }
]
}
}
Descrição
Itera SF2 em ordem do índice 1
(C5_FILIAL+F2_DOC) com filtros opcionais
num, cliente, loja e
emissao. Paginação via page/pageSize.
Query parameters
F2_DOC.F2_CLIENTE.F2_LOJA.AAAAMMDD — match exato.Cenário
Exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsDocFiscalSaida/_list?cliente=NF000001&page=1&pageSize=25
Descrição
Busca via TCGenQry em
SF2 com F2_DOC LIKE <q>% (helper
U_RestSug). Mínimo 2 caracteres em q;
limite default 10 (max 25).
Query parameters
F2_DOC.Cenário
Exemplo
GET https://erpapi.jetme.com.br/api/99/01/WsDocFiscalSaida/_search?q=0000&limit=5
Schemas
Componentes do contrato OpenAPICAMPOS_CAB_ALLOW em WsSF2.prw."N"=normal (default).AAAAMMDD. Default = data do servidor.CAMPOS_ITEM_ALLOW.AAAAMMDD.true.{ F2_DOC: "NF000001" } em POST, ou { cabecalho, itens } em GET).success=false.false.MATA920, traz o GetAutoGRLog com linhas separadas por /.Cenários
Combinações testáveis dos endpoints — alinhadas 1-pra-1 comexamples: do YAML.
Pendências conhecidas (rev2)
Rateio AGG não suportado. Pedidos que precisam de
rateio múltiplo por centro de custo precisam usar a tela MATA920 do ERP.
Adicionar suporte exige extensão do aCab com array
aRateio — não escopado nesta revisão.
Grade SD2 não suportada. Produtos com grade
(variação/tamanho) não podem ser incluídos por este endpoint —
MATA920 espera estrutura especial em aCab[?][SC9] que
não está mapeada.
Smoke test E2E pendente. Validação automática
requer fixtures estáveis de SA1, SB1,
SE4 e SF4 no ambiente. Hoje a validação
roda manual via Postman a partir do openapi.yaml.
Ver README.md do endpoint.
Bloqueio TOTVS SF2/SD2 ausente. A tabela SF2 não
tem C5_MSBLQL nesta base. O bloqueio efetivo herda de
SA1 (cliente) e SB1 (produto) via U_C980Blq no
wrapper U_MT920Exc.