Nordlet

← Blogue

O que Define uma API de Livro-Razão de Partida Dobrada Imutável

Uma análise prática das funcionalidades que distinguem um verdadeiro livro-razão contabilístico para mercados online de uma tabela de saldos mutável com bom marketing.

Nordlet Team · · 13 min de leitura

Um livro-razão (ledger) de um mercado online (marketplace) não se define pelo facto de armazenar movimentos de dinheiro. A maioria dos sistemas faz isso. Define-se pelo que acontece quando um fornecedor de pagamentos envia o mesmo webhook duas vezes, quando um reembolso chega depois de um vendedor já ter recebido o seu pagamento, ou quando um auditor pergunta como é que o saldo de um vendedor atingiu o valor atual. Esses momentos revelam se tem um livro-razão de partida dobrada imutável ou um campo mutável com um nome apelativo.

Para uma plataforma de mercado online, a resposta curta é esta: uma API de livro-razão de partida dobrada imutável regista todos os eventos com impacto financeiro como uma transação de diário equilibrada, publica-a de forma atómica, nunca a substitui e permite derivar saldos, reconciliar com sistemas externos e exportar o historial de forma programática. Tudo o resto são detalhes acessórios a esse núcleo.

Lançamentos de diário equilibrados e não um campo de saldo corrente

O teste mais claro de todos é a forma como a API representa o saldo de um vendedor. Se o saldo for um número que a sua aplicação incrementa diretamente, não se trata de um livro-razão de partida dobrada. Se o saldo for uma vista derivada de linhas de diário publicadas, poderá sê-lo.

Cada transação deve conter débitos e créditos iguais. Quando um comprador paga €100 por uma encomenda em que o mercado online retém uma comissão de €15, o livro-razão regista a conta de compensação debitada em €100 face a uma conta a pagar ao vendedor creditada em €85 e a receita de comissões creditada em €15. Os dois lados somam sempre o mesmo valor. Essa regra estrutural deteta uma grande variedade de erros antes de chegarem a um relatório.

Uma transação de diário deve expor, no mínimo:

  • Um ID de transação único e imutável
  • Linhas de débito e crédito, cada uma com uma conta, montante e moeda
  • Uma data de efeitos e um carimbo de data/hora de publicação
  • Um tipo de evento comercial (venda, reembolso, pagamento, estorno)
  • Uma chave de idempotência (idempotency key)
  • Uma referência de origem para a encomenda, pagamento ou evento do fornecedor
  • Um estado (pendente, publicado, estornado)
  • O serviço ou credencial que o criou

Os fundos disponíveis de um vendedor passam então a ser uma consulta a essas linhas, e não um valor que alguém atualizou no código da aplicação. Isto é importante porque um saldo modificado diretamente perde a justificação de cada movimento. O modelo do Nordlet trata o livro-razão de partida dobrada como o caminho de escrita autoritário: cada documento publica lançamentos de diário equilibrados, e a própria base de dados recusa lançamentos desequilibrados. Essa é a premissa correta para qualquer entidade que incorpore contabilidade num mercado online.

Publicação apenas de adição com correções compensatórias

"Imutável" deve significar que um diário publicado não pode ser editado no local. Os erros são corrigidos para a frente, e não apagados. Um lançamento de comissão incorreto recebe um estorno que anula o original, seguido de um lançamento corrigido que regista o resultado pretendido. Ambos remetem para o original, e o historial de auditoria mostra quem iniciou a alteração e quando.

A API deve rejeitar comandos simples de UPDATE e DELETE aplicados a registos contabilísticos publicados. Poderá permitir anexar metadados não financeiros, como uma referência de suporte, desde que os montantes, contas e carimbos de data/hora permaneçam inalterados.

Ajuda distinguir três conceitos que frequentemente se confundem:

  • Imutabilidade operacional: os utilizadores da aplicação não podem alterar ou eliminar linhas publicadas.
  • Imutabilidade de auditoria: o sistema consegue demonstrar que o historial não foi alterado.
  • Retenção legal: os registos são guardados pelo período exigido pela legislação aplicável.

Uma base de dados relacional orientada apenas à adição (append-only), com permissões restritas, cópias de segurança e fluxos de trabalho de estorno rigorosos, proporciona um livro-razão genuinamente imutável. A cadeia de blocos (blockchain) não é um requisito aqui e, no âmbito dos dados contabilísticos da UE, introduz habitualmente problemas de privacidade e de correção que superam a garantia de inviolabilidade que acrescenta.

Atomicidade e idempotência

Um evento de mercado online deve ser publicado de forma atómica. Ou todas as linhas do diário são consolidadas, ou nenhuma é. Registar areceção de €100 mas não conseguir registar a comissão de €15 produz um resultado desequilibrado e enganador que alguém terá de decifrar mais tarde. O Nordlet aplica isto abaixo da camada de aplicação: um gatilho diferido na base de dados verifica se cada lançamento está equilibrado no momento da consolidação, pelo que uma transação desequilibrada nunca pode ser consolidada.

A idempotência é o ponto onde a maioria das integrações falha silenciosamente. Os sistemas de pagamentos repetem pedidos em caso de falhas de rede e os ficheiros de liquidação são retransmitidos. Sem uma chave de idempotência associada ao inquilino (tenant) ou à conta, um único pedido repetido cria contabilidade duplicada. Um pedido repetido com a mesma chave deve devolver a transação original e não uma segunda.

A chave deve estar associada ao evento de origem, ao tipo de evento, ao ID de evento do fornecedor, à entidade legal e a um hash dos dados do pedido. Se a mesma chave chegar com um montante ou moeda diferentes, a API deve tratar isso como uma colisão e rejeitá-la, em vez de aceitar silenciosamente os novos dados. A aceitação silenciosa é a forma como as trilhas de auditoria se corrompem. O cabeçalho Idempotency-Key do Nordlet funciona desta forma: uma repetição com a mesma chave e os mesmos dados devolve a resposta armazenada, e a mesma chave com dados diferentes é rejeitada com idempotency_key_reuse. É uma funcionalidade pequena com um impacto desproporcionadamente positivo na reconciliação.

Contabilidade de repartição multipartidária

Uma encomenda num mercado online não representa um único movimento. Uma única venda pode envolver fundos do comprador, receitas do vendedor, comissão do mercado online, taxas de processamento de pagamentos, IVA sobre a comissão, portes de envio e reservas. O livro-razão necessita de estruturas de contas que mantenham estes elementos separados, em vez de os agrupar num único valor líquido.

Há um pressuposto comum que vale a pena contestar: a funcionalidade de "pagamento repartido" (split payout) de um fornecedor de pagamentos não é a mesma coisa que a contabilidade de um mercado online. Repartir dinheiro por vários destinatários encaminha fluxos de caixa. Não fornece um registo completo e imutável da comissão ganha, do IVA cobrado, dos reembolsos em dívida ou das reservas retidas. Continua a precisar do seu próprio livro-razão e continua a ter de o reconciliar com o fornecedor.

Um livro-razão de mercado online deve também distinguir mais do que um saldo de vendedor:

Estado do saldo O que representa
Pendente Fundos associados a um evento, mas ainda não elegíveis para levantamento
Disponível Fundos que cumprem as regras de libertação, reserva, reembolso e litígio
Retido / reservado Montantes retidos para estornos, devoluções ou controlos antifraude
Pago Montantes transferidos para o vendedor
Negativo / recuperável Montantes que o vendedor deve após reembolsos ou taxas excederem os fundos disponíveis

A transferência de fundos do estado pendente para o estado disponível deve ser, por si só, uma transação de diário equilibrada, e não um campo com um rótulo alterado.

Estornos, reembolsos e saldos negativos

O dinheiro nos mercados online circula em ambas as direções, muitas vezes fora de ordem. Os casos mais complexos são os reembolsos efetuados após o pagamento ao vendedor e os estornos que chegam semanas mais tarde. Um livro-razão sério define o que acontece quando o saldo disponível de um vendedor não consegue cobrir um reembolso: criar um saldo negativo, transferir o montante para contas a receber de vendedores, recorrer a uma reserva ou restringir pagamentos futuros.

Cada um destes eventos deve referenciar a transação original e preservá-la. O livro-razão regista a consequência contabilística de um reembolso. Não decide a política de reembolsos nem a responsabilidade legal do mercado online. Manter essa fronteira clara evita muitas conversas de conceção confusas.

Moedas e precisão

Os mercados online transfronteiriços necessitam de um tratamento explícito do dinheiro. Os montantes devem utilizar códigos de moeda ISO 4217 e uma representação exata, quer através de unidades fracionárias inteiras, quer de strings decimais de precisão fixa, nunca números de vírgula flutuante (floats). Sem arredondamentos silenciosos. Quando ocorre uma conversão, o livro-razão deve preservar o montante original, a taxa de câmbio, a fonte da taxa, o carimbo de data/hora e o montante resultante, com as diferenças de arredondamento lançadas numa conta definida.

Uma única transação equilibrada não deve misturar moedas sem um mecanismo de câmbio explícito. Se o fizer, os seus relatórios divergirão da realidade de formas difíceis de rastrear no final do mês.

Reconciliação com sistemas externos

Um livro-razão equilibrado internamente não é autoritário por si só. Tem de coincidir com o exterior: transações de fornecedores de pagamentos, taxas de fornecedores, relatórios de liquidação, extratos bancários, ficheiros de pagamento e relatórios de estorno.

Uma API madura suporta eventos externos importados e estados de correspondência como correspondido, parcialmente correspondido, não correspondido, duplicado, discrepância de montante e necessita de revisão. As diferenças de reconciliação devem originar registos de exceção explícitos ou lançamentos contabilísticos. Nunca devem reescrever silenciosamente o historial do livro-razão. A abordagem do Nordlet à reconciliação bancária e correspondência de pagamentos assenta neste princípio: os extratos importados e as exportações do Stripe ignoram tudo o que já foi importado, as sugestões de pagamento são pontuadas por montante, referência, contraparte e IBAN, a correspondência com um clique trata dos casos de rotina e as exceções são destacadas em vez de absorvidas.

Limites da UE que a API deve respeitar e aqueles que não consegue

É aqui que as promessas de marketing tendem a afastar-se da realidade. Um livro-razão ajuda a cumprir as obrigações da UE, mas não as satisfaz por si só.

IVA. O livro-razão deve preservar as dimensões relevantes para efeitos fiscais: jurisdição, taxa, categoria de imposto e a forma como a taxa foi determinada. Deve distinguir a venda do vendedor ao comprador da comissão do mercado online, e separar o IVA cobrado sobre as taxas dos montantes que apenas estão a transitar. O Nordlet gere os cálculos de IVA por país, a validação no VIES e a geração de registos i.SAF, juntamente com os cenários OSS e IOSS com que os mercados online da UE se deparam. Considere o livro-razão como prova e motor fiscal, e não como aconselhamento fiscal.

DAC7. As regras de reporte para plataformas exigem ligações fiáveis entre a identidade do vendedor, jurisdição, totais de transações, taxas, reembolsos e pagamentos. Um livro-razão equilibrado produz a prova da transação. Não determina se um vendedor está sujeito a reporte e não substitui os processos de KYC, integração (onboarding) ou o fluxo de trabalho de comunicação de dados. Mantenha a contabilidade de transações e o reporte regulamentar como preocupações distintas.

PSD2 e custódia de fundos. Registar movimentos de dinheiro não é o mesmo que ser um prestador de serviços de pagamento licenciado ou salvaguardar fundos. O livro-razão deve tornar explícitos o fluxo de fundos e as partes envolvidas. Não pode, por si só, fornecer autorização para serviços de pagamento ou provar que o dinheiro se encontra numa determinada conta. Isso continua a ser uma questão do seu papel regulamentar e do seu PSP.

RGPD (GDPR). A imutabilidade gera um conflito real com os princípios de proteção de dados. A arquitetura mais segura mantém os factos monetários no núcleo imutável e os dados pessoais fora do mesmo. Utilize referências de vendedores e clientes pseudónimas e estáveis nas linhas do diário. Armazene detalhes pessoais mutáveis num sistema separado, com acesso controlado e o seu próprio fluxo de trabalho de retenção e eliminação. "Imutável" não é uma licença para manter cada payload de pagamento para sempre.

Uma lista de verificação para avaliar uma API de livro-razão

Os rótulos de funcionalidades são baratos. Em vez disso, teste o comportamento num ambiente de testes (sandbox). Execute estes cenários e verifique as evidências:

  • Publique uma encomenda de €100 repartida entre o vendedor e o mercado online, e confirme um diário equilibrado com contas explícitas.
  • Envie o mesmo pedido duas vezes e confirme que gera apenas uma transação, sem duplicações.
  • Tente editar um lançamento publicado e confirme que é rejeitado ou limitado a metadados não financeiros.
  • Corrija uma comissão errada e confirme a existência de um estorno associado e de um lançamento corrigido.
  • Emita um reembolso parcial após o pagamento e confirme a existência de um reembolso rastreável com uma conta a receber do vendedor ou saldo negativo, conforme necessário.
  • Repita um webhook de um fornecedor e confirme a deteção de duplicados.
  • Processe uma liquidação multimoeda e confirme os detalhes de câmbio e a contabilidade de conversão.
  • Consulte o saldo de um vendedor no final do período e confirme um resultado reproduzível com um ponto de corte documentado.
  • Importe uma liquidação de um fornecedor e confirme a correspondência com um estado de exceção que deixa o historial intacto.
  • Exporte um mês de atividade e confirme um extrato completo, paginado e repetível.

A evidência mais sólida é a documentação acompanhada de um teste reproduzível. Palavras como "em tempo real", "pronto para auditoria" e "imutável" não significam nada sem o modelo de dados, a semântica de erros e o comportamento de retenção subjacentes.

O que verificaríamos primeiro

Se estivéssemos a avaliar uma API de livro-razão para um mercado online, começaríamos por dois aspetos antes de analisar qualquer outra coisa. Primeiro, certifique-se de que o saldo de um vendedor é derivado de linhas de diário e não de um campo mutável, pois tudo o resto depende disso. Segundo, repita o mesmo webhook e confirme exatamente um resultado contabilístico. Esses dois testes revelam mais sobre a qualidade da conceção subjacente do que qualquer lista de funcionalidades.

Depois disso, as considerações centradas na API importam para a rapidez com que a sua equipa entrega software: SDKs com tipos definidos, webhooks para eventos como sale_invoice.paid, um ambiente de testes funcional e o bloqueio de períodos para proteger meses encerrados. O Nordlet foi construído em torno deste modelo, disponibilizando através da API o mesmo conjunto de funcionalidades acessível na aplicação, o que permite a uma plataforma gerir livros contábeis prontos para auditoria no seu próprio produto, em vez de recorrer a soluções de pagamento de terceiros. Para uma perspetiva mais ampla sobre a forma como este livro-razão se integra na arquitetura de um mercado online, consulte o nosso guia sobre APIs de livros-razão de partida dobrada para contabilidade de mercados online.

FAQ

A partida dobrada garante que a minha contabilidade está correta?

Não. Um livro-razão pode estar perfeitamente equilibrado ao mesmo tempo que efetua lançamentos nas contas erradas, aplica o tratamento de IVA incorreto ou atribui fundos ao vendedor errado. O equilibrio é um controlo estrutural que deteta erros aritméticos e lados em falta numa transação. Não diz nada sobre se a lógica de negócio mapeou o evento corretamente. É por isso que os testes na sandbox com base em cenários reais são mais importantes do que a mera verificação de saldos.

O livro-razão de um fornecedor de pagamentos é suficiente para um mercado online?

Normalmente, não. Um PSP monitoriza fundos dentro do seu próprio sistema, o que é útil para fluxos e pagamentos. O seu mercado online continua a precisar dos seus próprios registos para receitas de comissões, responsabilidades perante vendedores, IVA sobre taxas, reembolsos, reservas, litígios e relatórios de gestão. Os dois sistemas têm de ser reconciliados e considerar a visão do fornecedor como a sua contabilidade deixa lacunas que vêm ao de cima numa auditoria.

Preciso de uma cadeia de blocos (blockchain) para tornar um livro-razão imutável?

Não. Um arquivo relacional apenas de adição com permissões rigorosas de escrita, fluxos de trabalho de correção controlados, registo de auditoria (audit logging) e cópias de segurança fiáveis proporciona imutabilidade operacional e de auditoria. A cadeia de blocos acrescenta provas de inviolabilidade distribuídas, mas traz dificuldades de privacidade, desempenho e correção que colidem com os requisitos de contabilidade da UE e do RGPD. Para a maioria dos mercados online, resolve um problema que não têm.

Um livro-razão imutável pode reter dados para sempre ao abrigo do RGPD?

A retenção de registos contabilísticos pelo período legalmente exigido é perfeitamente legítima. Reter dados pessoais completos ou payloads de pagamento indefinidamente apenas porque o livro-razão é imutável não o é. Mantenha os factos monetários e as referências pseudónimas no núcleo imutável e guarde os dados pessoais num sistema separado, com políticas adequadas de retenção e eliminação. A imutabilidade aplica-se ao evento financeiro e não a cada elemento de dados associado ao mesmo.