Pular para conteúdo

US3.4

Exportação de Certificado Digital em PDF (RF15)

História de Usuário

Como estudante, quero exportar meus certificados digitais em formato PDF para comprovação acadêmica junto à universidade.


Rastreabilidade

Item Código / Referência
User Story US3.4
Requisito Funcional RF15 — Emitir certificado
Característica de Produto CP03 — Acompanhamento e Certificação Acadêmica
Requisitos Não-Funcionais RNF07 (geração assíncrona de PDFs), RNF08 (imutabilidade de certificados), RNF09 (UUIDs para certificados)
Release Planejada R4 — Certificação

Descrição

Implementar a funcionalidade de exportação de certificados digitais em formato PDF. O estudante deve poder, a partir da lista de certificados, baixar um certificado individual ou exportar múltiplos certificados de uma vez para um arquivo compactado. Esta funcionalidade é o principal meio de o estudante utilizar os certificados para fins de comprovação acadêmica de horas complementares. O escopo é full-stack.


Critérios de Aceite (BDD / Gherkin)

Cenário 1: Download de certificado individual

Dado que a estudante "Maria Silva" possui o certificado da atividade "Apoio em Eventos" disponível
Quando acessa a lista de certificados e clica em "Baixar PDF"
Então o sistema inicia o download do arquivo PDF do certificado para o dispositivo

Cenário 2: Exportação de múltiplos certificados

⚠️ Planejado — não entregue no MVP. Atualmente só há download individual (Cenário 1); a exportação em lote (arquivo .zip) ainda não foi implementada.

Dado que a estudante "Maria Silva" possui 3 certificados disponíveis
Quando seleciona os 3 certificados e clica em "Exportar selecionados"
Então o sistema gera um arquivo compactado contendo os 3 PDFs e inicia o download

Cenário 3: Visualização prévia antes do download

⚠️ Parcial. Entregue: ao baixar, o PDF abre no visualizador do dispositivo/navegador. Um visualizador integrado ao app (botão "Visualizar" dedicado) permanece Planejado.

Dado que o estudante deseja verificar o conteúdo do certificado antes de baixá-lo
Quando clica em "Visualizar" no certificado desejado
Então o sistema abre o PDF em um visualizador integrado ao aplicativo

Cenário 4: Certificado indisponível

Dado que a atividade "Aulas de Reforço" teve frequência registrada, mas o certificado ainda está sendo processado
Quando o estudante acessa a lista de certificados
Então o sistema exibe "Certificado em processamento" e desabilita temporariamente o botão de download

Cenário 5: Compartilhamento do certificado

Dado que o estudante deseja enviar o certificado por e-mail ou aplicativo de mensagens
Quando clica em "Compartilhar" no certificado
Então o sistema abre o menu nativo de compartilhamento do dispositivo com o arquivo PDF anexado


Regras de Negócio

  • O estudante pode fazer o download de qualquer certificado que tenha sido emitido em seu nome, quantas vezes desejar.
  • O certificado baixado deve ser idêntico ao documento original emitido pela plataforma, preservando todas as informações, o código de validação e o QR Code.
  • A exportação de múltiplos certificados simultaneamente deve gerar um arquivo compactado contendo cada certificado como um arquivo PDF individual.
  • Certificados que foram revogados não podem ser baixados novamente, mesmo que o estudante já tenha realizado download anteriormente.
  • O nome do arquivo PDF deve seguir o padrão certificado-<nome da atividade>-<nome do estudante>.pdf, com caracteres acentuados normalizados e espaços substituídos por hífens.

Requisitos Técnicos

  • Backend: Django + DRF. Endpoints: GET /api/v1/certificates/{id}/download/ — download individual. POST /api/v1/certificates/bulk-download/ — recebe lista de IDs e retorna ZIP.
  • Geração de ZIP: Utilizar zipfile (Python stdlib) para compactar múltiplos PDFs em memória e retornar como FileResponse.
  • Frontend: React Native + Expo + NativeWind. Lista de certificados com checkbox para seleção múltipla, botões de download individual e em lote, visualizador de PDF integrado, integração com Share API nativa.
  • Performance: PDFs grandes ou múltiplos downloads simultâneos devem utilizar StreamingHttpResponse para evitar carregar o arquivo inteiro em memória.
  • Testes: pytest para testar download individual, exportação em lote, conteúdo do ZIP e comportamento com certificados revogados.

Referências de Design

  • Protótipo Figma (Geral): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=0-1
  • Observação: As telas de exportação e compartilhamento de certificados precisam ser confirmadas no protótipo Figma.

Dependências

  • Relacionada a: #31 (Geração de Certificado — RF15/US3.3), #34 (Download de Certificados — RF16/US3.6)
  • Bloqueada por: #31 (RF15 — Emitir certificado)
  • Bloqueia: N/A

Notas

  • ICE Score: I=10 C=5 E=3 = 150 | MoSCoW: Must | Quadrante: Plan
  • US3.4 compartilha o mesmo ICE de US3.3 (RF15), pois ambas derivam do mesmo requisito funcional de emissão de certificado. A exportação é uma extensão natural da geração: uma vez que o PDF existe, baixá-lo é uma operação de leitura simples.
  • O compartilhamento nativo (Share API) depende de funcionalidades específicas do Expo (expo-sharing e expo-file-system).
  • A geração de ZIP para múltiplos certificados requer cuidado com memória em dispositivos móveis: considerar limite máximo de certificados por exportação em lote (ex.: 10 por vez).

Definição de Preparado (DoR)

Item de Verificação (Universal) Evidência / Rastreabilidade Situação
A história está bem descrita e com critérios de aceite? Documentada e alinhada com o escopo do MVP. ✔ Sim
Possui protótipos de interface necessários? Interface mapeada e disponível no Figma da equipe. ✔ Sim
A história é independente o suficiente para ser entregue? Cadeia de dependências resolvida (vide Matriz MVP). ✔ Sim
Foi estimada pela equipe? Estimada utilizando o método ICE Score. ✔ Sim

Definição de Pronto (DoD)

Pergunta Fundamental (Universal) Evidência de Implementação Status
O código foi implementado e revisado? Pull Request aprovado e fundido na branch principal. ✔ Sim
Coerente com o protótipo validado? O layout segue os componentes e tokens de design. ✔ Sim
Passou nos testes necessários? Testes (unitários/integração) executados e aprovados. ✔ Sim
A documentação está atualizada? Atualizada no repositório de requisitos. ✔ Sim

Critérios de Aceitação (CA)

  • Download individual: O estudante clica em "Baixar PDF" e o certificado é salvo no dispositivo.
  • Download de múltiplos: O estudante seleciona mais de um certificado e clica em "Exportar selecionados" — todos são compactados em um único arquivo para download.
  • Visualização prévia: O estudante consegue visualizar o conteúdo do certificado antes de baixá-lo.
  • Certificado em processamento: Se o certificado ainda não estiver pronto, o botão de download aparece desabilitado com o status "Certificado em processamento".
  • Compartilhar: O estudante consegue compartilhar o certificado via e-mail ou aplicativos de mensagem diretamente do aplicativo.

Acesso & Evidência

  • Código Homologado: Repositório Principal
  • Status de Conclusão: 100% Entregue (conforme Matriz de Completude).