콘텐츠로 이동
getnextpdf.com

Enterprise 에디션

Validation — 심층 참조

Validation 모듈은 원시 PDF 바이트에 대해 사전 구축된 읽기 전용 구조 규정 준수 정책을 실행합니다. Compliance::assess()는 정확히 하나의 CompliancePolicy를 적용하고 심각도별로 분할된 발견 사항과 필수 법적 고지를 담은 ComplianceReport를 반환합니다. PDF/A-4(및 ef 변형), PAdES 기준 구조, eIDAS 구조 프로파일, LTV/DSS 상태, ZUGFeRD / Factur-X, FDA 21 CFR Part 11, SEC Rule 17a-4 WORM 아카이빙에 대한 정책이 제공됩니다. 모든 정책은 순수 함수입니다. 바이트가 입력되면 발견 사항이 출력됩니다. Validation은 문서를 절대 변경하지 않으며 암호학적 검증을 절대 수행하지 않습니다.

이 기능은 NextPDF Enterprise(nextpdf/enterprise)에 포함되며 Enterprise 등급 라이선스 엔벨로프로 활성화됩니다. 해당 권한이 없는 배포에서는 이 기능의 클래스가 로드되지 않습니다. 에디션 비교 및 라이선스 받기.

Validation/Evidence 표면은 enterprise.compliance.evidence 역량으로 라이선스됩니다. 거부된 권한은 조용히 격하하지 않고 해당 기능을 거부합니다.

등급Validation 표면
Core인프로세스 바이트 스트림 검증기와 문법 교차 검사. 발견 사항이 0건인 결과는 검사된 결과일 뿐 인증서가 아닙니다.
Proe-인보이스 계층에서 인프로세스 EN 16931 / Factur-X / ZUGFeRD 검증. 사전 구축된 PDF/A-4, PAdES, LTV, FDA, 또는 SEC 정책은 없습니다.
Enterprise통합 보고서를 갖춘 PDF/A-4, PAdES, LTV, ZUGFeRD, FDA Part 11, SEC 17a-4에 대한 사전 구축 구조 정책(이 모듈).

Enterprise Compliance 외부 사이드카 게이트웨이는 별개의 구분되는 모듈입니다.

Terminal window
composer require nextpdf/enterprise:^3
심볼매개변수기본 동작반환예외 또는 실패비고
Compliance::__construct?ClockInterface $clock = null클록이 주입되지 않으면 시스템 클록DI 친화적 인스턴스 형태. 클록이 validatedAt를 각인
Compliance::runstring $pdfData, CompliancePolicy $policy, array $context = []정확히 하나의 정책을 적용하고 실제 경과 시간을 측정ComplianceReport사용자 정의 정책 예외를 전파. 내장 정책은 예외를 던지는 대신 발견 사항을 수집인스턴스 메서드
Compliance::assess (정적)string $pdfData, CompliancePolicy $policy, array $context = []기본 인스턴스를 생성하고 run()에 위임ComplianceReportrun()과 동일무설정 빠른 경로
Policies::pdfA4 / ::pdfA4e / ::pdfA4f (정적)ISO 19005-4:2020에 따른 PDF/A-4 구조 정책CompliancePolicye는 3D/리치 미디어 주석을 허용. f는 임베드 파일 관계 검사를 추가
Policies::padesBaseline (정적)PAdES B-B 구조 검사CompliancePolicy구조 전용. 암호학적 검증 없음
Policies::eidasQualified (정적)eIDAS 라벨이 붙은 프로파일 하의 PAdES 구조 검사CompliancePolicy적격성은 TSP와 적격 인증서에 따라 달라짐
Policies::ltvHealth (정적)DSS 구조 상태 검사CompliancePolicy활성 객체 그래프에서 DSS 존재 여부를 해석, fail-closed
Policies::zugferd (정적)string $profile = 'BASIC'프로파일 별칭을 정규화하고 ZUGFeRD 검증기를 구축CompliancePolicy\ValueError(알 수 없는 프로파일)프로파일: MINIMUM, BASIC, BASIC_WL, EN16931, EXTENDED
Policies::fdaPart11 (정적)FDA 21 CFR Part 11 구조 정책CompliancePolicy감사 추적 해시 체인 무결성을 포함한 7가지 구조 검사
Policies::sec17a4 / ::sec17a4Compatible / ::sec17a4Structural / ::sec17a4PreSign (정적)지정된 엄격도의 SEC 17a-4 WORM 정책CompliancePolicy엄격도는 WormComplianceLevel에 매핑
CompliancePolicy (인터페이스)하나의 표준을 위한 전략 계약getName(), getIdentifier(), getStandardReference(), validate(). 고객이 구현 가능
ComplianceReport읽기 전용 값 객체생성 시 심각도별로 분할된 발견 사항passes(), fails(), totalFindings(), getDisclaimer(). 공개 findings, errors, warnings, infos, policyName, policyId, standard, validatedAt, durationMs
ComplianceFindingSeverity $severity, string $ruleId, string $message, string $clause = '', string $suggestion = ''조항 참조와 개선 힌트를 담은 하나의 규칙 결과정적 error() / warning() / info(). isError()
Severity (enum)문자열 기반 케이스 3개Error, Warning, InfoError만 보고서를 실패시킴
WormComplianceLevel (enum)문자열 기반 케이스 4개Full, Compatible, Structural, PreSignrequiresSignature(), requiresDocMdp(), requiresLtv(), maxDocMdpLevel()
PdfAPolicy, PadesValidator, LtvHealthCheck, ZugferdValidator, Sec17a4WormPolicy, Fda\FdaPart11Policy클래스별 생성자각각 하나의 표준에 대해 CompliancePolicy를 구현validate()에서 list<ComplianceFinding>Policies를 통해 획득. Sec17a4WormPolicy::getLevel()이 구성된 엄격도를 노출
Fda\FdaSigningIntent (enum)문자열 기반 케이스 6개Authoring, Review, Approval, Certification, Verification, RejectiontoPdfReasonString()이 정규 /Reason 문자열을 산출
Fda\FdaAuditEvent::__constructDateTimeImmutable $timestamp, string $actor, FdaSigningIntent $action, string $documentHash, string $certificateSerial, string $previousEventHash = ''생성 시 SHA-256 체인 해시를 계산InvalidArgumentException(타임스탬프가 UTC 아님)공개 eventHash. toXmpRdf()이 하나의 XMP 리스트 항목을 직렬화
Fda\FdaAuditTrail::addEventFdaAuditEvent $event체인 링크가 트레일 꼬리와 일치하면 이벤트를 추가selfInvalidArgumentException(해시 체인 손상)그 외 createEvent(), verifyChain(), getLastEventHash(), getEvents(), embedInMetadata()
Fda\FdaSignatureEnforcer::configureSeedValueFdaSigningIntent $intent, string $tsaUrlFDA 제약 서명 시드 값 구성을 구축SeedValueConfigFDA reason 세트, 타임스탬프, SHA-256 이상의 다이제스트를 요구
Fda\FdaSignatureEnforcer::applyToSequentialSigner $signer, SigningStrategy $strategy, string $signerName, FdaSigningIntent $intent, string $tsaUrl, string $fieldName = '', ?string $reason = nullPro SequentialSigner에 FDA 제약 서명자를 추가SequentialSigner제약 조건을 생성된 서명 필드로 직렬화
namespace NextPDF\Enterprise\Validation;
final readonly class Compliance
{
public function __construct(?ClockInterface $clock = null);
/** @param array<string, mixed> $context */
public function run(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
/** @param array<string, mixed> $context */
public static function assess(string $pdfData, CompliancePolicy $policy, array $context = []): ComplianceReport;
}
final class Policies
{
public static function pdfA4(): CompliancePolicy; // also pdfA4e(), pdfA4f()
public static function padesBaseline(): CompliancePolicy;
public static function eidasQualified(): CompliancePolicy;
public static function ltvHealth(): CompliancePolicy;
public static function zugferd(string $profile = 'BASIC'): CompliancePolicy;
public static function fdaPart11(): CompliancePolicy;
public static function sec17a4(): CompliancePolicy; // also sec17a4Compatible(), sec17a4Structural(), sec17a4PreSign()
}
interface CompliancePolicy
{
public function getName(): string;
public function getIdentifier(): string;
public function getStandardReference(): string;
/**
* @param array<string, mixed> $context
* @return list<ComplianceFinding>
*/
public function validate(string $pdfData, array $context = []): array;
}
final readonly class ComplianceReport
{
public const string LEGAL_DISCLAIMER;
public function passes(): bool;
public function fails(): bool;
public function totalFindings(): int;
public function getDisclaimer(): string;
}

Compliance::assess()(정적)와 Compliance::run()(인스턴스, 주입 가능한 Psr\Clock\ClockInterface 포함)는 정확히 하나의 정책을 적용하고 ComplianceReport를 반환합니다. 외부에서 관찰 가능한 규칙:

  • 순수 읽기 전용. 모든 CompliancePolicy::validate()는 순수 함수입니다. 바이트가 입력되면 발견 사항이 출력됩니다. 정책은 PDF 바이트를 절대 변경하지 않습니다. 이 아키텍처 불변식은 검증을 자동 수정 및 Evidence 모듈과 구분되게 유지합니다.
  • 심각도 게이트. ComplianceReport::passes()errors === []일 때만 true입니다. 경고와 정보는 보고서를 절대 실패시키지 않습니다. fails()는 그 보수입니다.
  • 필수 고지. ComplianceReport::getDisclaimer()는 상수 법적 고지 텍스트를 반환합니다. 이를 사용자에게 표시되는 출력에 노출하는 것은 계약상 요구됩니다.
  • 보고서 출처. 보고서는 정책에서 가져온 정책 이름, 식별자, 표준 참조와, 주입된 또는 시스템 클록에서 가져온 검증 타임스탬프, 그리고 측정된 소요 시간(밀리초)을 담습니다.
  • 중단하지 않고 수집. 내장 정책은 첫 번째 오류에서 멈추지 않고 적용 가능한 모든 검사를 실행하며 모든 발견 사항을 수집합니다.
  • 카탈로그로 도달 가능한 DSS만. LtvHealthCheck는 활성 객체 그래프에서 DSS 존재 여부를 해석합니다. 활성 트레일러, 그다음 /Root 카탈로그, 그다음 /DSS와 그 하위 키 순입니다. 주석, 문자열, 고아 객체, 또는 대체된 리비전에 심어진 마커 바이트는 계산되지 않습니다. 파싱할 수 없는 입력은 DSS 없음으로 취급되므로 검사는 fail-closed입니다. 이 검사는 구조적이며, 임베드된 OCSP/CRL 데이터를 암호학적으로 검증하지 않습니다.
  • 구조 전용 서명 검사. Policies::padesBaseline()Policies::eidasQualified()는 PDF 수준에서만 PAdES 구조를 검증합니다. eIDAS 하의 적격성은 TSP와 적격 인증서에 따라 달라지며, 이는 이 모듈의 범위 밖입니다.
  • 규제 산업 정책은 구조적입니다. FdaPart11Policy는 서명 존재, /Reason 의도, /M 서명 시간, /Name 신원, JavaScript 없음, FDA 감사 추적 네임스페이스, 해시 체인 무결성을 검사합니다. Sec17a4WormPolicy는 최대 13개의 WORM 규칙을 검사하며, WormComplianceLevel이 엄격도를 선택합니다. Full은 DocMDP 레벨 1을 요구하고, Compatible은 레벨 2를 허용하며, Structural / PreSign은 서명, DocMDP, DSS 규칙을 건너뜁니다. 어느 정책도 법적 준수를 확립하지 않습니다.
  • ZUGFeRD 컨텍스트. Policies::zugferd()는 항상 PDF 수준 요구 사항을 검사합니다. 호출자가 $context['xml' => $xmlData]를 전달할 때만 인보이스 XML을 검증하며, 그렇지 않으면 정보 발견 사항 zugferd-xml-skipped를 방출합니다.
  • 변조 감지 감사 추적. FdaAuditTrail은 추가 전용 SHA-256 해시 체인입니다. addEvent()는 손상된 링크를 거부하고, verifyChain()은 모든 해시를 재도출하며, embedInMetadata()는 PDF/A 확장 스키마와 함께 http://ns.nextpdf.dev/fda/1.0/ 아래의 XMP에 트레일을 기록합니다.
  • PDF가 아니거나 비어 있는 입력은 내장 정책에서 예외가 아니라 오류 발견 사항을 산출합니다. 항상 passes()를 확인하고 고지를 노출하십시오.
  • Policies::zugferd()는 프로파일 별칭(BASIC_WL, EN16931, EN_16931)을 정규화합니다. 알 수 없는 프로파일은 어떤 검증이 실행되기 전에 팩토리 시점에 \ValueError를 발생시킵니다.
  • CRL은 있으나 OCSP 응답이 없는 DSS는 폐지 자료 검사를 충족합니다. 발견 사항은 허용되는 대안을 명시합니다. 둘 다 존재하지 않는 것이 오류입니다.
  • /VRI 딕셔너리나 /Certs 배열이 없으면 오류가 아니라 경고를 생성합니다. 보고서는 여전히 통과할 수 있습니다.
  • FdaAuditEvent는 생성 시 UTC가 아닌 타임스탬프를 InvalidArgumentException으로 거부합니다.
  • FdaAuditTrail::verifyChain()은 변조되거나 순서가 바뀐 이벤트에 대해 false를 반환하며, 절대 예외를 던지지 않습니다.
  • 사용자 정의 CompliancePolicy 구현은 validate()에서 예외를 던질 수 있습니다. Compliance::run()은 이를 잡지 않으므로 그러한 예외는 호출자에게 전파됩니다.

이 모듈은 서명, 암호학적 검증, 키 보관을 수행하지 않습니다. FIPS 모드 알고리즘 정책은 Security 및 Signature 모듈이 관장합니다. FdaSignatureEnforcer 시드 값은 FDA 바인딩 서명 필드를 SHA-256, SHA-384, 또는 SHA-512 다이제스트 방식으로 제약합니다.

이 정책들은 명명된 표준을 기준으로 구조적 속성을 검사합니다. ISO/ETSI 프로파일에 대한 적합성 판정은 최종 파일과 외부 검증기의 속성으로 남습니다.

동작참조
적합성은 생성자가 아니라 표준을 기준으로 판정됨ISO 19005-4:2020 §5.2
장기 검증을 위한 디지털 서명 딕셔너리 / DSSISO 32000-2:2020 §12.8
DSS는 문서 카탈로그의 DSS 키가 보유한 딕셔너리ISO 32000-2:2020 §12.8.4.3
PAdES 기준 서명 레벨ETSI EN 319 142-1 §5.4.3
EN 16931 프로파일 시맨틱 모델(보조 참조)Factur-X 1.08 (EN 16931)

FDA 21 CFR Part 11 및 SEC 17a-4 정책은 구조적 속성만 검사합니다. 해당 규정은 검증 코퍼스 밖에 있으며 검증된 적합성 주장을 수반하지 않습니다. FDA 발견 사항 내부의 조항 문자열(예: §11.50, §11.10(e))은 제품이 방출하는 규칙 참조입니다. EN 16931 행은 검색 임계값 아래의 보조 참조이며, 엄격한 적합성 주장이 아닙니다. 표준 지원은 표준 적합성이 아니며, 적합성은 인증이 아닙니다 — NextPDF는 어떤 인증도 보유하지 않으며 어떤 인증도 부여하지 않습니다. 이 참조는 법률 의견이 아닙니다. 법적 충족성에 대해서는 규정 준수 팀에 문의하십시오.

  • Validation은 네트워크 I/O 없이 인프로세스에서 로컬로 실행됩니다. 정책은 입력을 변경할 수 없습니다.
  • 신뢰할 수 없는 출처의 PDF 바이트를 적대적인 것으로 취급하십시오. 내장 정책은 임의의 바이트에 대해 전역적이며 구조를 해석할 수 없는 경우 fail-closed됩니다.
  • 보고서의 모든 사용자 대상 렌더링에서 ComplianceReport::getDisclaimer()를 노출하십시오.
  • 보고서와 발견 사항은 서명된 문서와 감사 추적 메타데이터에서 비롯된 개인 데이터(서명자 이름, 인증서 일련번호)를 포함할 수 있습니다. 운영자가 보존 및 최소화 통제를 소유합니다.
  • 사용자 정의 정책은 CompliancePolicy를 구현합니다. 직렬화와 캐싱을 위해 모든 정책에서 getIdentifier()를 고유하게 유지하십시오.
  • 이 모듈은 암호학적 기능과 관련됩니다. 자체 검토에서 이를 보안 민감 요소로 취급하십시오.
  • 내부 메커니즘 세부 정보는 소스 저장소의 내부 문서에 남으며 이 매뉴얼의 범위 밖입니다.

이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 표, 런북 파일명, 티켓 접두사는 범위 밖입니다.