Como o registro nasce
O lançamento comum
Seção intitulada “O lançamento comum”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).
O caminho sem conexão
Seção intitulada “O caminho sem conexão”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.
Quem pode escrever o quê
Seção intitulada “Quem pode escrever o quê”| 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).
O que o servidor recusa
Seção intitulada “O que o servidor recusa”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.