Visão geral da API
Esta seção foi escrita para administradores e desenvolvedores de integrações — o único canto desta base de conhecimento onde nomes de classes Apex têm lugar.
A REDA Financials é nativa do Salesforce até a raiz: todo documento é um objeto personalizado, toda contabilização é uma mudança de estado disparada por trigger, e por isso toda API padrão do Salesforce funciona sobre os seus dados contábeis prontamente. Além dessa superfície da plataforma, o pacote expõe um conjunto pequeno e deliberado de contratos estáveis. Esta visão geral mapeia todo o panorama de integração.
As quatro camadas de integração
| Camada | O que é | Artigo |
|---|---|---|
| APIs padrão do Salesforce | REST, Bulk e (se habilitado na organização) streaming contra os objetos refin__ — CRUD, consulta, carga em massa. A camada de uso mais frequente. | REST · Bulk · Streaming |
| A API global de Apex | Cinco classes globais estáveis (abaixo) para cálculo de impostos, geração de PDF, recebimento de e-mail e contratos de extensão de provedores. | Apex Development |
| Pontos de integração declarativos | Uma ação de Fluxo empacotada ("Generate PDF Document") mais o padrão de que contabilizar = uma atualização do campo de status que qualquer Fluxo pode realizar. | Flows Integration |
| Extensibilidade sem código | Field sets que estendem formulários, dimensões do livro razão e PDFs sem tocar em código. | Extensibilidade por FieldSets |
Tudo o que é incluído — e tudo o que deliberadamente não é
O planejamento de integrações começa com um inventário honesto. Aqui está a superfície empacotada completa — e, tão útil quanto isso, as coisas que você poderia procurar e que não estão lá, porque a plataforma padrão já as fornece:
| Superfície | O que é incluído | Onde é abordado |
|---|---|---|
| Classes globais de Apex | Cinco: refin.GlobalTaxService, refin.PDFGeneratorAPI, refin.BankFeedProvider, refin.EInvoiceProvider, refin.OCREmailHandler | Apex Development · Pacotes de extensão |
| Ações invocáveis de Fluxo | Exatamente uma: Generate PDF Document (categoria "REDA Financials") | Flows Integration |
| Objetos e campos personalizados | Todo documento, linha e registro do livro razão é um objeto personalizado refin__ comum — CRUD e consulta completos através das APIs padrão | REST · Bulk |
| Field sets | 43 field sets empacotados nos objetos transacionais, em três famílias (Interface, Posting_Mapping, PDF_Template) — editáveis pelo administrador, sem código | Extensibilidade por FieldSets |
| Endpoints REST personalizados | Nenhum — nenhuma classe @RestResource é incluída; os endpoints padrão de sObject, consulta e composite são a superfície REST | REST API |
| Platform events / CDC | Nenhum empacotado; Change Data Capture sobre os objetos refin__ é uma capacidade padrão da organização que o seu administrador pode habilitar | Streaming |
| Named credentials / connected apps | Nenhum é incluído — as integrações se autenticam através do connected app e do fluxo OAuth da própria organização, sob as suas próprias políticas | — |
| Chamadas externas (callouts) de saída | Exatamente duas: o serviço de IA da REDA para os recursos de IA (incluído na licença REDA Financials AI) e o Open Exchange Rates para a sincronização diária das taxas de câmbio | Recursos de IA · Sincronização de câmbio |
A superfície global de Apex — a lista completa
Treze tipos globais constituem o contrato Apex estável do pacote. Cinco são os pontos de entrada do dia a dia:
refin.GlobalTaxService— calcula imposto indireto e retenção na fonte de forma programática, sem DML, com resultados totalmente resolvidos contra o livro razão.refin.PDFGeneratorAPI— gera o PDF de um documento a partir de Apex ou Fluxo.refin.BankFeedProvider— o contrato abstrato que os pacotes de extensão de feed bancário implementam.refin.EInvoiceProvider— o contrato abstrato que os provedores de fatura eletrônica implementam.refin.OCREmailHandler— o manipulador de e-mail de entrada por trás da automação de e-mail para fatura; aponte um Email Service para ele.
Os oito restantes existem para os pacotes de extensão: os contratos de nota fiscal eletrônica e os tipos que eles trocam, mais dois pontos de entrada que você chama diretamente:
refin.EInvoiceQueueProvider,refin.EInvoiceDocumentProvider,refin.EInvoiceProvisioner— interfaces globais adicionadas ao lado deEInvoiceProvider, porque uma classe abstrata global já publicada não pode ganhar métodos sem quebrar os pacotes que já a estendem.refin.EInvoiceDocument,refin.EInvoiceEvent,refin.EInvoiceProvisionResult— os tipos de transferência de dados que esses contratos recebem e devolvem.refin.EInvoiceStatusPollSchedulable— agende a consulta de status de nota fiscal eletrônica no seu próprio cron em vez do cartão do Console de administração.refin.EInvoiceTrailCreator— crie uma trilha de nota fiscal eletrônica para faturas de venda contabilizadas; também exposta como ação de Flow.
Tudo o mais no pacote é public — interno, invisível entre namespaces, e sujeito a mudanças. Se uma classe não estiver nesta lista, não construa nada dependente dela.
Serviços internos não são API — mesmo quando você consegue vê-los
Ao ler logs de depuração e conjuntos de permissões, você encontrará classes de serviço internas por trás de ações do dia a dia — contabilização, renderização de PDF, importação de extrato bancário, chamadas de IA e de câmbio, carga inicial de conteúdo fiscal. Elas são public, não global — o Apex de assinantes e extensões não pode chamá-las através da fronteira do namespace, e sua forma interna pode mudar em qualquer versão, então nada do que você construir deve referenciá-las pelo nome:
| O que acontece internamente | A rota suportada em vez disso |
|---|---|
| O motor de contabilização por trás de toda transição de Rascunho para Contabilizado | Atualize refin__Status__c para 'Posted' — o trigger executa o motor para você |
| O motor por trás da ação Atualização em Massa de Status no modo de exibição de lista, que nunca contorna as validações padrão de contabilização | A ação no modo de exibição de lista, ou suas próprias atualizações em massa de status via APIs |
| Os internos da renderização de PDF | refin.PDFGeneratorAPI.generateOne ou a ação de Fluxo |
| Os internos da importação de extrato bancário | O contrato BankFeedProvider e gravações via API padrão |
| Os dois caminhos de chamada externa de saída (IA, taxas de câmbio) | Opere-os a partir do Console de Administração; eles não são superfícies invocáveis |
| A carga inicial de conteúdo fiscal por país por trás do Assistente de Configuração de Impostos | Execute o assistente na interface |
refin.PDFGeneratorAPI e refin.EInvoiceTrailCreator, as duas que sustentam ações de Fluxo empacotadas. refin.GlobalTaxService, refin.BankFeedProvider, refin.OCREmailHandler e os tipos de contrato de nota fiscal eletrônica não são concedidos por nenhum conjunto de permissões empacotado; conceda esses você mesmo onde o seu contexto de Fluxo ou Apex exigir.
Versionamento e segurança em atualizações
As classes de API do pacote são compiladas na versão 65.0 da API do Salesforce — refin.GlobalTaxService se declara "@since API v65.0". A regra dos pacotes gerenciados é a espinha dorsal do seu planejamento:
- Global é para sempre: uma vez publicadas, classes, métodos e variáveis de membro globais não podem ser removidos nem ter suas assinaturas alteradas pelo publicador. Os treze tipos acima, as ações de Fluxo que eles expõem, e todo objeto e campo
refin__publicado são a sua superfície estável. - Public é privado, na prática: classes internas podem ser renomeadas, remodeladas ou excluídas em qualquer versão — e como são invisíveis entre namespaces, nada do que você publica pode quebrar por depender delas, porque nada do que você publica pode depender delas.
- O comportamento viaja através dos triggers: todos os 52 triggers empacotados executam sobre o DML da API de forma idêntica em todas as atualizações — não há flag de bypass a perder, nem modo especial a retestar.
Uma integração típica, em linhas gerais
O sistema de gestão de propriedades da Meridian Properties Group fatura os locatários; a REDA mantém a contabilidade. A integração noturna se autentica através do próprio connected app da Meridian como um usuário de integração que possui Accounts Receivable, insere cada fatura como um refin__Sales_Invoice__c em rascunho com suas linhas, e depois atualiza cada uma para Posted em uma segunda chamada. Os números de documento são atribuídos a partir das sequências da entidade na inserção, os valores padrão da entidade são preenchidos, e a contabilização executa o motor completo — impostos, taxas de câmbio, validações de período. Quando um registro falha (um período fechado, por exemplo), a mensagem de erro que a API retorna é a mesma frase que um usuário leria na tela, o que torna as conversas de suporte curtas. Código personalizado total na REDA: nenhum.
O único princípio que torna a integração fácil
A API e a interface são a mesma máquina. Insira uma fatura em rascunho via REST e ela recebe seu número de documento, valores padrão da entidade e validações exatamente como se tivesse sido digitada. Atualize seu status para Posted e o motor de contabilização completo é executado — impostos, retenções, taxas de câmbio, todas as validações. Não existe uma porta dos fundos para integrações, o que significa que não há nada de especial a aprender: o que um usuário pode fazer, um usuário de API pode fazer, sob as mesmas regras e os mesmos conjuntos de permissões.
O que vem a seguir
- API REST para dados contábeis — a integração do primeiro dia.
- Desenvolvimento em Apex na REDA — as classes globais em detalhe.
- Pacotes de extensão — os contratos de provedor.
Perguntas frequentes
Sim — é exatamente isso que 'global' significa em um pacote gerenciado: assinaturas globais publicadas não podem ser removidas nem alteradas. Essa garantia é justamente o motivo pelo qual a superfície é mantida pequena.
O mesmo conjunto de permissões empacotado que uma pessoa realizando esse trabalho teria (uma integração de AP contabiliza contas a pagar → Accounts Payable). Os triggers aplicam regras idênticas para gravações via API e via interface; não existe um perfil de integração separado a inventar.
Configuração → Gerenciador de Objetos — todo objeto REDA está lá sob o prefixo refin__ (por exemplo, refin__Sales_Invoice__c, refin__Status__c). As chamadas describe padrão também funcionam, claro.
Não — ele é public, então a própria plataforma o torna invisível para o seu namespace. A rota suportada (e igualmente segura para operações em massa) é a atualização do campo de status: o trigger invoca o motor com cobertura completa das validações.
Exatamente dois destinos de chamada externa são incluídos: o serviço de IA da REDA (os recursos de IA, incluídos na licença REDA Financials AI) e o Open Exchange Rates (sincronização diária de câmbio, para organizações multimoeda). Nenhum webhook, nenhum outro endpoint — qualquer outra coisa que você veja em uma revisão de segurança não é da REDA.
Isso foi útil?