API REST para dados contábeis
Como todo documento da REDA Financials é um objeto personalizado do Salesforce, a API REST padrão é a porta de entrada para a sua integração: crie faturas a partir do seu CRM ou sistema de faturamento, consulte saldos para um data warehouse, contabilize documentos a partir de middleware — tudo com os endpoints que a sua equipe já conhece.
O padrão canônico: criar um rascunho e depois contabilizar
Insira o cabeçalho como Rascunho
Envie um POST do documento (por exemplo, refin__Sales_Invoice__c) com entidade, cliente, datas — status omitido (o padrão é Rascunho) ou explicitamente 'Draft'. Os triggers se comportam exatamente como na interface: o número do documento é atribuído a partir da sequência da entidade, o livro razão e o período são derivados, a data de vencimento vem das condições de pagamento.
Insira as linhas
Envie um POST dos registros de linha (refin__Sales_Invoice_Line__c) referenciando o cabeçalho — produtos, quantidades, preços, perfis fiscais, exatamente os campos que o formulário pede. (A API composta agrupa as etapas 1 e 2 em uma única chamada, de forma organizada.)
Faça um PATCH do status para Contabilizado
Atualize refin__Status__c para 'Posted'. Essa única atualização de campo é a ação de contabilização: o mecanismo grava os lançamentos no livro razão, calcula impostos e retenções, registra as taxas de câmbio — e aplica todas as validações (equilíbrio, período aberto, aprovação, contas ativas). Uma contabilização recusada retorna como um erro DML padrão com a mesma mensagem literal que um usuário veria.
Os endpoints, em resumo
Nada aqui é específico da REDA — são os endpoints REST padrão do Salesforce, mostrados em relação aos objetos refin__ (o pacote é criado na API v65.0; qualquer versão atual funciona):
| Tarefa | Método e endpoint |
|---|---|
| Criar o cabeçalho de um documento | POST /services/data/v65.0/sobjects/refin__Sales_Invoice__c |
| Ler um registro | GET /services/data/v65.0/sobjects/refin__Sales_Invoice__c/{id} |
| Atualizar (incluindo contabilizar) | PATCH /services/data/v65.0/sobjects/refin__Sales_Invoice__c/{id} |
| Consultar | GET /services/data/v65.0/query?q=<SOQL> |
| Cabeçalho + linhas em uma única viagem | POST /services/data/v65.0/composite (ou composite/tree) |
| Descobrir campos e listas de opções | GET /services/data/v65.0/sobjects/refin__Sales_Invoice__c/describe |
Contabilizando um rascunho, na prática
A chamada de contabilização é deliberadamente anticlimática — um único campo:
PATCH /services/data/v65.0/sobjects/refin__Sales_Invoice__c/a0X8d000001AbCdEAV
{
"refin__Status__c": "Posted"
}
O sucesso é um HTTP 204 No Content — com um documento totalmente contabilizado por trás dele. Uma recusa retorna como o array de erro padrão, carregando a mensagem legível do pacote; por exemplo, um usuário de integração sem uma licença REDA vê:
[
{
"message": "Você deve ser um usuário licenciado do REDA Financials para criar, editar ou excluir Transações contábeis. Contate o administrador.",
"errorCode": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
"fields": []
}
]
Consultar de volta o que você criou é SOQL simples:
GET /services/data/v65.0/query
?q=SELECT Id, Name, refin__Status__c
FROM refin__Sales_Invoice__c
WHERE refin__Status__c = 'Draft'
Para os corpos de inserção em si, obtenha a lista de campos no endpoint describe ou no Gerenciador de Objetos, em vez deste artigo — os conjuntos de campos e campos obrigatórios da sua organização são a verdade, e os campos de dimensão extras que o seu administrador adicionou fazem parte dela.
O que a plataforma preenche automaticamente para você
| Ao… | Os triggers fazem… | Consequência para a integração |
|---|---|---|
| Inserir sem status | O status assume o padrão 'Draft' | Você pode omitir refin__Status__c na criação |
| Inserir | O número do documento é atribuído a partir da sequência da entidade (sensível ao tipo — faturas e notas numeram separadamente); predefinir Name opta pela numeração manual, com a exclusividade validada de qualquer forma | Não gere seus próprios números, a menos que pretenda assumir essa responsabilidade |
| Inserir | Os valores padrão da entidade são preenchidos: livro razão, período contábil, data de vencimento a partir da condição de pagamento do fornecedor | Envie os campos de negócio; omita os que podem ser derivados |
| Alterar a Entidade ou o Tipo de Fatura em um Rascunho | O documento renumera | Espere um novo número se o seu middleware "mover" um rascunho entre entidades |
| Rascunho → Contabilizado | O mecanismo completo: lançamentos no livro razão, cálculo de impostos e retenção na fonte, registro da taxa de câmbio, todas as validações | Contabilizar via API é, byte a byte, a mesma contabilização da interface |
Lendo dados
- SOQL pelo endpoint de consulta — faturas em aberto, recebimentos não aplicados, campos de aging (são campos de fórmula nos registros), o que quer que o seu painel precise.
- O próprio livro razão —
refin__Accounting_Transaction__cé a verdade da contabilização; some débitos e créditos por conta contábil e você reconstruiu qualquer saldo externamente. - Os totalizadores são campos — o saldo devedor de uma fatura, o valor não aplicado de um recebimento, o valor comprometido de uma linha de orçamento: tudo consultável diretamente, sem cálculo do seu lado.
Regras do caminho
- Não existe atalho: documentos contabilizados ficam bloqueados a edições via API exatamente como para os usuários; correções passam pelos fluxos de descontabilização/cancelamento, programaticamente as mesmas transições de status.
- Aplicações também são registros — criar um
refin__Cash_Receipt_Application__caplica um recebimento (todas as validações de correspondência são executadas); excluí-lo desfaz a aplicação. - Respeite as datas de fechamento — gravações em livros fechados são recusadas; sua integração deve datar documentos em períodos abertos, como qualquer contador faria.
- A idempotência é sua responsabilidade — a chave natural é a referência do seu sistema de origem (coloque-a no campo Referência e verifique antes de inserir; a validação de duplicidade de referência do fornecedor ajuda no lado de contas a pagar).
Erros comuns a evitar
| Erro | Por que prejudica | Faça isto em vez disso |
|---|---|---|
| Inserir documentos com Status 'Posted' em uma única chamada | A contabilização é projetada em torno da transição Rascunho → Contabilizado; uma inserção direta como Contabilizado está fora do padrão suportado e seu comportamento não é garantido | Insira como Rascunho e depois faça um PATCH para Contabilizado — a chamada composta transforma isso em uma única viagem de ida e volta de qualquer forma |
| Gerar seus próprios números de documento de forma casual | Predefinir Name muda esse documento para numeração manual — agora a exclusividade é responsabilidade sua, por entidade | Deixe as sequências numerarem os documentos; reserve a numeração manual para cenários deliberados de migração |
| Executar a integração com um login de administrador emprestado | As trilhas de auditoria ficam confusas, as trocas de senha quebram o fluxo, e as permissões são muito mais amplas do que a tarefa exige | Um usuário de integração dedicado, com uma licença e o conjunto de permissões empacotado mais restrito que realize o trabalho |
| Tentar novamente contabilizações com falha sem critério | A mensagem já disse por que falhou — um período fechado leva a tentar de novo contra a mesma parede para sempre | Analise o erro, corrija os dados (ou encaminhe para um humano) e só então tente novamente |
| Ignorar o campo Referência | Você perde a sua chave de idempotência e o melhor sinal de correspondência da conciliação bancária | Sempre traga o identificador real do sistema de origem no campo Referência |
O que vem a seguir
- Bulk API — o mesmo padrão em escala de migração.
- Visão geral da API — todo o panorama.
- Saldos de abertura e migração de dados — o projeto clássico de REST/Bulk.
Perguntas frequentes
Use as duas etapas (inserir como Rascunho e depois atualizar para Contabilizado) — é o padrão em torno do qual o mecanismo foi construído, dá a você um limite de erro claro entre "dados incorretos" e "contabilização recusada", e espelha o salvar-depois-contabilizar da interface. As chamadas compostas fazem disso uma única viagem de ida e volta de qualquer forma.
São erros DML padrão que carregam as mensagens de validação do pacote na íntegra ("Transaction Date ... is on or before the GL book closure date...", "This document requires approval before posting."). Registre-as, exiba-as, corrija os dados — as mensagens foram escritas para humanos.
O pacote é direcionado à API v65+; use uma versão atual e os objetos refin__ se comportam como qualquer objeto personalizado nessa versão.
Sim, se ele criar ou contabilizar documentos contábeis — a verificação de licença é executada nas gravações via API exatamente como na interface, e um usuário sem licença é recusado com a mesma mensagem literal mostrada acima. Atribua ao usuário de integração uma licença e o conjunto de permissões apropriado, assim como a um humano.
Não — o pacote não inclui nenhum recurso REST personalizado, por design. Os endpoints padrão de sObject, consulta e composição sobre os objetos refin__ são toda a superfície REST, o que significa que todo cliente REST do Salesforce, ferramenta de ETL e conector de middleware já sabe falar com ela.
Isso foi útil?