mirror of https://github.com/interlegis/sapl.git
Browse Source
Assinar pelo app uma materia ja assinada no SAPL apagava a assinatura anterior.
Sem erro nenhum: o `assinatura_info` seguia dizendo duas, e o PDF tinha uma.
Por que acontece. O encadeamento do amu-backend (ADR-0013) procura a pendencia
irma ASSINADA no banco DELE. Assinatura feita no SAPL nao cria irma la — ela
chega pelo evento `DocumentoAssinado`, e ate ele chegar o app recai no alvo em
branco. O micro entao ve zero assinaturas, compoe uma pagina nova, e o receiver
daqui SOBRESCREVE o `pdf_assinado` com esse PDF de uma assinatura so.
Com dado real (IND 820/2026): Kinho assinou as 16:01, o cursor de
assinaturas-concluidas do hub estava em 15:01 e o processo, parado. As duas
pendencias no AMU seguiam PENDENTE com `assinadoDocumentoKey` nulo. A janela
nao e teorica.
O que muda aqui:
1. O receiver conta as assinaturas no BINARIO que chega e compara com as
registradas. Um PDF que substitui N assinaturas precisa trazer pelo menos
N+1; menos que isso e fork, nao encadeamento → 409 e nada e gravado. A
pendencia continua de pe e o app reassina sobre o documento certo, que e o
desfecho correto. Perder assinatura em silencio nao e.
A conta que decide e a do artefato, nao a do banco: `assinatura_info` e o
que o SAPL ACHA que o documento tem, o PDF e o que ele TEM. Contagem
impossivel (PDF ilegivel) nao vira recusa — so barra o que PROVA o fork.
2. A pendencia passa a se descrever inteira: `assinaturas_existentes`,
`codigo_autenticacao` e `documento_encadeado` (URL + hash do pdf_assinado
corrente). Assim o consumidor acerta sem depender de ter processado o evento
anterior. `documento` continua sendo o ALVO BASE de proposito — e contra ele
que o receiver confere `hash_alvo_esperado` na retificacao (§5.1). Campos
aditivos: consumidor antigo ignora e segue como antes.
O par desta correcao esta no amu-backend (`assinaturaEncadeada` passa a olhar a
propria pendencia). Emenda registrada na ADR-0013.
De quebra, a assercao obsoleta em `test_grava_assinatura_no_formato_da_sprint`:
ela cobrava `info['nome']`, chave que o receiver deixou de gravar em 93af2c45
quando passou a usar as chaves da rotina nativa (ADR-0013 §4). O teste estava
vermelho desde entao.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
pull/3858/head
committed by
GitHub
4 changed files with 237 additions and 2 deletions
Loading…
Reference in new issue