Passo 2 de 2 da conciliacao. O passo 1 (chore/conciliacao-3.1.2-na-dev) trouxe a
3.1.2 inteira para a dev, inclusive as telas "Assinar Despachos em Lote". Este
aplica a delegacao da C3 por cima **sem derrubar essas telas**, que e a decisao
tomada: o individual delega a composicao ao microservico, o lote continua
compondo localmente.
Por que as duas coisas convivem sem contradicao: o /sign/batch nao compoe a
pagina — seus parametros valem para o lote inteiro, e a composicao e por
documento (a URL de verificacao carrega o pk, o codigo sai do hash daquele PDF).
Mas ele **carimba** um PDF ja composto e posicionado. Entao o lote compoe cada
documento aqui e manda coordenadas explicitas. O artefato sai igual: a grade e o
algoritmo do codigo (sha256[:16].upper(), congelado) sao os mesmos dos dois lados.
Como foi feito, e por que assim: em vez de resolver o merge das duas linhagens no
braco (21 blocos de conflito, 708 linhas), o delta C2→C3 do views_assinatura foi
aplicado sobre a base da 3.1.2 — que e literalmente "portar a C3 para cima do que
existe". Sobraram 3 conflitos, todos de uma linha ou duas:
- assinatura de _assinar_pdf_com_pagina_auth: mantidos os parametros de A3
(assinatura_a3_bytes, cert_chain_bytes) que so a 3.1.2 tinha, e acrescentado o
hash_doc que a C3 usa no corpo — sem ele o codigo ja emitido nao voltaria ao
microservico da 2a assinatura em diante;
- imports do PyPDF4: mantida a uniao (PdfFileWriter e base64 seguem em uso no
caminho A3);
- bloco de nome/cargo: fica o da C3 (_nome_e_cargo_do_assinante, fonte unica),
preservando o tipo_cert_display que o resto da funcao usa.
_carregar_certificado nao voltou de proposito: a C3 ja o havia removido em
178865f5 e ele nao tem chamador na 3.1.2 — conferido no repositorio inteiro.
assinar_pdf_lote_via_api volta ao cliente, agora com chamador de verdade e com a
condicao de validade no docstring: so aceita PDF ja composto e posicionado. O
docstring do modulo passa a explicar as duas composicoes que convivem e quando
usar cada uma, em vez de dizer que lote nao serve.
Uma melhoria junto: as duas telas de lote duplicavam a composicao inline (ler
dimensoes, gerar codigo, montar URL, anexar pagina). Passam a chamar
_compor_pagina_auth_localmente, o mesmo helper do caminho individual local.
Eram tres copias da mesma composicao; agora e uma.
Verificado:
- nenhum marcador de conflito; sapl/materia compila;
- todas as funcoes da 3.1.2 seguem no arquivo (exceto a morta acima) e todas as
oito novas da C3 tambem;
- todo nome importado de views_assinatura e do cliente em urls.py e views.py
existe;
- analise estatica de nome livre nas duas telas de lote e no modulo inteiro: nada
fora de escopo depois do port.
Nao testado com o microservico ao lado: o teste ponta a ponta da C3 (primeira
assinatura anexa a pagina, segunda cai no bloco 1, mesmo retangulo nos dois
backends) precisa ser refeito aqui, agora incluindo uma rodada pelas telas de
lote. E o que falta antes do merge.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>