evaluateDocMdp method

Implementation

PdfDocMdpEvaluation evaluateDocMdp(PdfSignatureValidationReport report) {
  final cert = report.signatures.where(
    (s) => s.docMdp.isCertificationSignature == true,
  );
  if (cert.isEmpty) {
    return const PdfDocMdpEvaluation(
      canAppendSignature: true,
      code: PdfDocMdpDecisionCode.noCertification,
      reason: 'Sem assinatura de certificação (DocMDP).',
    );
  }

  final perms =
      cert.map((e) => e.docMdp.permissionP).whereType<int>().toSet();

  if (perms.contains(2)) {
    return const PdfDocMdpEvaluation(
      canAppendSignature: true,
      code: PdfDocMdpDecisionCode.p2Allowed,
      reason: 'DocMDP P=2 permite formulários e novas assinaturas.',
      permissionP: 2,
    );
  }
  if (perms.contains(3)) {
    return const PdfDocMdpEvaluation(
      canAppendSignature: true,
      code: PdfDocMdpDecisionCode.p3Allowed,
      reason: 'DocMDP P=3 permite anotações, formulários e assinaturas.',
      permissionP: 3,
    );
  }
  if (perms.contains(1)) {
    return const PdfDocMdpEvaluation(
      canAppendSignature: false,
      code: PdfDocMdpDecisionCode.p1Blocked,
      reason: 'DocMDP P=1 bloqueia alterações e novas assinaturas.',
      permissionP: 1,
    );
  }

  return const PdfDocMdpEvaluation(
    canAppendSignature: false,
    code: PdfDocMdpDecisionCode.unknown,
    reason: 'DocMDP presente com permissão indefinida.',
  );
}