Browse Source

Feat(Assinatura): receiver do hub grava assinatura_info no shape nativo AB#1473 (#22)

A pagina de verificacao le nome_assinante/cargo/data_assinatura/
tipo_certificado_display; o receiver do hub gravava nome/data e omitia cargo,
entao a assinatura pelo app aparecia sem nome/cargo/data na verificacao
enquanto a nativa aparecia. Alinha as chaves a rotina nativa do SAPL,
derivando o cargo do autor. Decisao em ADR-0013.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
pull/3858/head
Kemuel-sepulvida 4 weeks ago
committed by GitHub
parent
commit
93af2c4575
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 31
      sapl/integracao_hub/views.py

31
sapl/integracao_hub/views.py

@ -532,13 +532,36 @@ class RecepcaoAssinaturaView(IntegracaoHubView):
nome, ContentFile(conteudo), save=False) nome, ContentFile(conteudo), save=False)
# APPEND no formato da sprint — multiassinatura incremental. # APPEND no formato da sprint — multiassinatura incremental.
#
# As chaves aqui têm que ser as MESMAS que a página pública de
# verificação lê (materia_verificar_documento →
# nome_assinante/cargo/data_assinatura/tipo_certificado_display)
# e que a rotina NATIVA do SAPL grava (views_assinatura, dict
# `nova_assinatura`). Antes gravávamos `nome`/`data` e omitíamos
# `cargo`: a via do app entrava sem nome/cargo/data na tela de
# verificação, enquanto a via nativa aparecia. Isto expande a
# rotina nativa para o receiver do hub (app → amu → micro → hub).
tipo_desc = ''
if getattr(autor, 'tipo', None) is not None:
tipo_desc = (autor.tipo.descricao or '')
cargo = ('Vereador(a)' if 'parlamentar' in tipo_desc.lower()
else (tipo_desc or 'Vereador(a)'))
tipo_cert = (request.data.get('tipo_certificado') or 'A1').upper()
tipo_cert_display = (
request.data.get('tipo_certificado_display')
or 'ICP-Brasil – %s' % tipo_cert)
assinaturas = self._normalizar(materia.assinatura_info) assinaturas = self._normalizar(materia.assinatura_info)
assinaturas.append({ assinaturas.append({
# exibidos na verificação pública (mesmas chaves do fluxo nativo)
'nome_assinante': request.data.get('nome') or autor.nome,
'cargo': cargo,
'data_assinatura':
timezone.localtime(agora).strftime('%d/%m/%Y %H:%M:%S'),
'tipo_certificado': tipo_cert,
'tipo_certificado_display': tipo_cert_display,
# rastro operacional interno (não exibido na verificação)
'signed_by': titular.username, 'signed_by': titular.username,
'nome': request.data.get('nome') or autor.nome,
'data': agora.isoformat(),
'tipo_certificado':
request.data.get('tipo_certificado') or '',
'operado_por': operado_por, 'operado_por': operado_por,
}) })
materia.assinatura_info = assinaturas materia.assinatura_info = assinaturas

Loading…
Cancel
Save