Pular para o conteúdo

Como o registro nasce

O app grava primeiro no aparelho, para funcionar sem conexão, e marca o registro como “pendente de envio”. Quando há conexão, ele sobe para o servidor. Ali, a regra de segurança do banco de dados confere a gravação antes de aceitá-la; só então o registro passa a existir. Depois da gravação, uma função do servidor (um trigger, que roda sozinho a cada alteração de um documento) cria o registro da trilha.

sequenceDiagram
    participant A as App
    participant R as Regras
    participant D as Plano
    participant T as Trigger
    A->>A: grava local
    A->>R: envia a nota
    R->>R: confere
    R->>D: aceita e grava
    D->>T: dispara
    T->>T: grava auditLog

A regra confere, por exemplo, que o autor da nota é a conta conectada (G-04), que a hora de registro, quando vem, é a do servidor (G-32) e que a data da compra não é anterior à entrada do autor no plano (G-23). O registro da trilha leva a hora do evento no servidor (G-12).

Uma nota lançada sem rede fica só no aparelho. O relógio do aparelho é controlado por quem o usa; por isso a hora do aparelho nunca é prova. A data da compra é uma informação declarada por quem lançou; a hora em que o registro passou a existir no servidor é outra, e é a que vale.

flowchart TD
    A["Nota criada sem rede<br/>(só no aparelho)"] --> B["Volta a conexão: o app envia"]
    B --> C["Nota chega sem hora de registro"]
    C --> D["Regra aceita:<br/>campo ausente é permitido"]
    D --> E["Trigger grava a trilha<br/>com a hora do servidor"]

Quando a nota traz hora de registro, ela tem de ser a do relógio do servidor no momento da gravação (G-32); a hora de uma nota lançada sem conexão é a da trilha (G-12). Numa nota assim, a distância entre a data da compra e a hora do registro na trilha mostra quanto tempo a nota ficou só no aparelho.

Registro Quem grava Garantias
Nota O autor, em nome da própria conta. Outro membro só altera as etiquetas e a lista de itens (usada para corrigir nome ou categoria); a regra não confere o valor de cada item, e em nota fiscal a quantidade de itens é travada (G-33). Ver “Valor dos itens da nota fiscal” ao fim da página. G-04, G-05
Pagamento O dono do pagamento, em nome da própria conta; o autor não é trocado. G-04, G-30, G-31
Comentário Membro do plano cria; ninguém edita. Em nome de outro membro, só como cópia idêntica na mudança da nota de plano; o comentário de outro só é apagado junto da própria nota. Ver o parágrafo abaixo. G-04
Rateio e membros Só a função do servidor writePlanSplit; nem o criador grava direto. G-18, G-19, G-20, G-21
Retirada de itens da divisão Só a função do servidor setProductExclusions. G-24
Entrada no plano Pedido pela função requestJoinPlan; só o criador aprova. G-17
Acerto Uma das duas partes cria; só a contraparte confirma ou contesta; ninguém apaga. G-25
Mensagem da conversa Membro, em nome da própria conta, com hora do servidor; imutável. G-27
Arquivos Membro (o criador, no caso do acordo); nunca sobrescrito nem apagado. G-08, G-09
Trilha de auditoria Só o servidor; nunca o cliente. G-13

Dois pontos sobre comentários, que o perito pode encontrar. Primeiro, a regra só permite gravar um comentário em nome de outro membro na mudança de uma nota de plano: quem grava é o autor da nota, a nota de destino declara de onde veio, o comentário existe na origem, é apagado de lá no mesmo envio e a cópia é idêntica ao original. Segundo, o autor da nota só apaga o comentário de outro membro junto da própria nota, no mesmo envio; o autor do comentário não o apaga. As duas operações ficam na trilha (G-12), com o conteúdo e a conta que as fez.

Essas duas restrições valem desde 2026-10-14. Antes, o autor da nota podia gravar comentário em nome de outro membro e apagar comentário alheio a qualquer momento; para registros anteriores, a conta de cada gravação está na trilha (G-04).

Cada recusa abaixo vem da regra ou da função do servidor e tem teste automatizado que falha se ela deixar de valer.

Tentativa Resposta do servidor Garantia
O dono de um pagamento o passa para o nome de outro membro Recusa G-30
Criar pagamento com data de compra diferente da data da nota Recusa G-31
Lançar nota ou pagamento com data de compra anterior à entrada do autor no plano (a regra tolera 12 horas de diferença, por causa do fuso do aparelho) Recusa G-23
Gravar nota com hora de registro inventada Recusa G-32
Mudar o valor de uma nota lida por QR Code ou código de barras, fora do desconto no caixa e da nota ainda não transmitida Recusa G-26
Incluir ou excluir itens de nota fiscal Recusa G-33
Retirar item da divisão com o valor de um item diferente do histórico A função recusa refazer a divisão G-34
Mudar a divisão a partir de uma data anterior a um acerto confirmado A função recusa G-20
Alterar a parte de quem já saiu do plano A função recusa G-21

Note-se o que não está na tabela: a regra não impede, por si só, alterar o valor de cada item de uma nota fiscal. O que o servidor garante é que essa alteração não muda quanto a nota custa nem a divisão por item, e que ela fica na trilha. Ver “Valor dos itens da nota fiscal” em Limites conhecidos.