toUiSummary method

PdfUiSummary toUiSummary(
  1. PdfValidationWithProfilesResult result, {
  2. String locale = 'pt_BR',
})

Implementation

PdfUiSummary toUiSummary(
  PdfValidationWithProfilesResult result, {
  String locale = 'pt_BR',
}) {
  final signatures = result.report.signatures.map((sig) {
    final signer = sig.signerCertificate;
    final trust = result.trustResolutionBySignature.firstWhere(
      (e) => e.signatureIndex == sig.signatureIndex,
      orElse: () => PdfTrustResolutionBySignature(
        signatureIndex: sig.signatureIndex,
        fieldName: sig.signatureField?.fieldName ?? 'Signature',
        trustedByProfile: const <String, bool>{},
        winningProfile: null,
        reasons: const <String>[],
      ),
    );

    final alerts = <String>[];
    if (!sig.intact) {
      alerts.add('Documento modificado após assinatura.');
    }
    if (!sig.cmsValid || !sig.digestValid) {
      alerts.add('Falha criptográfica de assinatura.');
    }
    final rev = _revocationStatus(sig.revocation);
    if (rev == 'revoked') {
      alerts.add('Certificado revogado.');
    } else if (rev == 'unknown') {
      alerts.add('Revogação não comprovada.');
    }
    if (trust.winningProfile == null) {
      alerts.add('Cadeia não resolvida por perfil de confiança.');
    }

    final nome = _nameFromSubject(signer?.subject) ??
        sig.signatureField?.fieldName ??
        'Assinante';

    return PdfUiSignatureSummary(
      signatureIndex: sig.signatureIndex,
      nome: nome,
      cpfMasked: _maskCpf(signer?.icpBrasilIds?.cpf),
      cadeia: trust.winningProfile ?? 'Desconhecida',
      integridade: sig.intact && sig.cmsValid && sig.digestValid,
      alertas: alerts,
    );
  }).toList(growable: false);

  return PdfUiSummary(
    locale: locale,
    signatures: signatures,
  );
}