Lewati ke konten
getnextpdf.com

Pro edisi

Compliance — Referensi Mendalam

Modul Compliance menggabungkan tiga permukaan independen di bawah NextPDF\Pro\Compliance:

  • Pelaporan language-tag — facade kebijakan /Lang PDF/UA-2 yang ketat plus reporter peristiwa-kepatuhan terstruktur berbentuk PSR-3.
  • Penanganan e-invoice — validasi Factur-X 1.08 / ZUGFeRD 2.4 terhadap model semantik EN 16931, dan emisi PDF/A-3 hibrida.
  • Provenans — menyematkan dan mengekstrak manifest store C2PA yang disuplai pemanggil melalui parser JUMBF yang diperkeras secara adversarial; sintesis klaim tetap tergerbang-preview.

Modul ini melaporkan apa yang diperiksanya. Ia tidak mensertifikasi dokumen dan tidak melakukan penandatanganan kriptografis.

Kapabilitas ini dikirim dalam NextPDF Pro (nextpdf/pro) dan diaktifkan dengan envelope lisensi tier Pro. Deployment tanpa entitlement tersebut tidak memuat kelas-kelas kapabilitas ini. Bandingkan edisi dan dapatkan lisensi.

Tidak ada flag lisensi per-fitur. Ini adalah kapabilitas edisi Pro. Builder klaim C2PA eksperimental selain itu memerlukan opt-in environment eksplisit (lihat Kasus tepi & mode kegagalan).

Terminal window
composer require nextpdf/pro:^3
SimbolParameterPerilaku bakuMengembalikanMelempar atau gagal denganCatatan
LangComplianceReporter::warn() / ::error()string $tag, string $reason, ?string $clauseReference = nullMengeluarkan satu rekaman JSON terstruktur per peristiwa language-tag melalui logger PSR-3voidJsonException jika rekaman gagal encoding JSONwarn = penolakan mode-lax; error = penolakan mode-strict
LangComplianceReporter::reportException()InvalidBcp47TagException $exception, string $severity = 'error'Mengekstrak tag dan alasan dari eksepsi; mendelegasikan ke warn() atau error()voidSeperti di atasJalur kemudahan
LangComplianceReporter::buildRecord()string $severity, string $tag, string $reason, ?string $clauseReference = nullMembangun array rekaman tanpa mencatatarrayTidak melemparUntuk sink khusus seperti ringkasan JSON per-berkas
ConformancePolicy::default()?LoggerInterface $logger = nullKebijakan UA-2 ketat: tag /Lang yang malformasi atau tidak terdaftar ditolakselfTidak melemparBaku v5.0 adalah ketat
ConformancePolicy::fromCore()CoreConformancePolicy $core, ?LoggerInterface $logger = nullMembungkus kebijakan Core yang ada apa adanya; tidak ada sumbu yang dibalikselfTidak melemparUtamakan default() untuk postur ketat
ConformancePolicy::withStrictUa2()bool $enabledMengembalikan salinan dengan sumbu ketat diatur; menonaktifkan mengeluarkan notice PSR-3selfTidak melemparOpt-out deprecated; target penghapusan 6.0.0
ConformancePolicy::isStrictUa2() / ::mode()Membaca kebijakan Core yang mendasaribool / ConformanceModeTidak melempar
EInvoiceValidator::validate()string $pdfPathPipeline penuh: pemeriksaan wrapper PDF/A-3, ekstraksi lampiran, deteksi profil, aturan EN 16931, SchematronEInvoiceValidationResultSubkelas EInvoiceException saat kegagalan I/O, struktur PDF malformasi, atau kres toolingAntarmuka SPI beku; PDF non-e-invoice yang well-formed mengembalikan hasil, tidak pernah melempar
EInvoiceXmlValidator::validate()string $xmlPayload, ValidatorContext $contextPra-terbang struktural plus korpus aturan semantik-mendalam EN 16931 atas payload CIIkontrak ValidationResultTidak melempar untuk input tidak valid; penolakan muncul sebagai hasil gagal dengan temuanValidator lintas-tier konkret; input digerbang melalui XmlGuard
EInvoiceValidationResult::isValid()Benar hanya ketika wrapper, spek lampiran, profil, sintaks berlaku dan tidak ada pelanggaran FATALboolTidak melemparDaftar pelanggaran kosong saja bukanlah validitas
EInvoiceValidationResult::notAnEInvoice()Hasil deterministik semua-null, semua-falseselfTidak melemparFactory untuk kasus “bukan faktur hibrida”
EInvoiceProfileenum berbasis-stringCase MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED, didukung URN BT-24isEn16931Conformant() false untuk MINIMUM dan BASIC_WL
EInvoiceSyntaxenum berbasis-stringCase UN_CEFACT_CII, UBL_INVOICE, UBL_CREDIT_NOTEHanya CII yang isFacturXEligible(); UBL hanya-validator
BusinessRuleViolationstring $ruleId, BusinessRuleSeverity $severity, string $message, ?string $xpath = null, ?string $ramPath = nullDTO pelanggaran imutabelFamili rule-id BR-, BR-CO-, BR-CL-, BR-DEC-, BR-FXEXT-
BusinessRuleSeverityenum berbasis-stringFATAL membatalkan faktur; WARNING menandai masalah kualitasMencerminkan level Schematron EN 16931
FacturXEmbedder::embed()lihat pagar signatureMenambahkan stream embedded-file, filespec, dan XMP ke sumber PDF/A; menulis ulang xrefvoidEInvoiceException saat XML malformasi, sumber tak terbaca, katalog hilang, sumber object-stream atau xref-stream, atau kegagalan tulis outputBerkas sumber dibiarkan utuh
FacturXEmbedderOptions::default()/AFRelationship /Alternative, nama berkas factur-x.xml, tipe INVOICE, versi 1.0selfTidak melemparBaku memenuhi mandat Jerman dan tetap diterima di Prancis
FacturXEmbedderOptions::withRelationship() / ::withFilename()stringMengembalikan salinan dengan override diterapkanselfInvalidArgumentException di luar set penerimaanRelationship: Source, Data, Alternative; nama berkas termasuk zugferd-invoice.xml dan xrechnung.xml
FacturXEmbedderOptions::withDocumentType()string $documentTypeMengembalikan salinan dengan override document-type XMPselfTidak melemparNilai tidak dienumerasi secara defensif
FacturXContractEmbedder::embed()string $pdfBytes, string $xmlPayload, EmbedderOptions $optionsAdapter byte-masuk, byte-keluar atas FacturXEmbedder via berkas temp berumur-pendekstringEInvoiceException; profil XRECHNUNG ditolak karena hanya-EnterpriseImplementasi EmbedderInterface lintas-tier
C2paManifestEmbedder::embed()string $pdfBytes, ManifestStore $storeMenyematkan serialisasi byte store pada lokasi profilstringC2paException saat kegagalan embed apa punAntarmuka SPI beku; hanya-byte, tanpa I/O
C2paManifestEmbedder::extract()string $pdfBytesMengurai store tersemat melalui parser JUMBF yang diperkerasManifestStore|nullSubkelas C2paException ketika store hadir tetapi melanggar cap pengerasanNull menandakan ketiadaan; ketiadaan tidak pernah melempar
ManifestStore::fromBoxes() / ::empty()list<JumbfBox> / —Membangun value object store imutabelselfTidak melemparUrutan box menanggung-beban untuk kesetaraan round-trip
ManifestStore::toBytes() / ::isEmpty() / ::size()Menserialisasi box root; store kosong menserialisasi ke string kosongstring / bool / intTidak melempar
JumbfBoxParser::parse()string $bytesMengurai box JUMBF tingkat-root di bawah cap keraslist<JumbfBox>MalformedJumbfException, JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededExceptionCap: kedalaman 8, 64 MiB per box, 128 MiB total, MAX_CHILDREN_PER_SUPERBOX 4096
JumbfBox::superbox() / ::leaf()string $tbox, …Membangun box tervalidasi; toBytes() round-trip melalui parserselfMalformedJumbfException ketika TBox tidak tepat 4 byte
C2paCapabilityStatus::current() / ::summary()Melaporkan kematangan kapabilitas C2PA, saat ini preview-draftself / stringTidak melemparPenanda preview yang dapat diperiksa mesin
Feature::PREVIEW_C2PA_DRAFT->isEnabled()Membaca environment proses pada setiap panggilan; hanya literal '1' yang mengaktifkanboolTidak melemparEnv var NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT
ExperimentalC2paEmbedder::buildManifestStore()string $sourceBytes, string $producerMembangun manifest store yang dipatok-draft dengan satu asersi klaim hash-binding SHA-256ManifestStoreKonstruktor melempar LogicException ketika flag preview matiPreview; format wire dipatok ke snapshot draft; tidak ada tanda tangan klaim yang dikeluarkan

Signature entry-point, verbatim:

public static function default(?LoggerInterface $logger = null): self
public function withStrictUa2(bool $enabled): self
public function isStrictUa2(): bool
public function validate(string $pdfPath): EInvoiceValidationResult
public function embed(
string $sourcePdfPath,
string $xml,
EInvoiceProfile $profile,
string $outputPdfPath,
?FacturXEmbedderOptions $options = null,
): void
public function embed(string $pdfBytes, ManifestStore $store): string
public function extract(string $pdfBytes): ?ManifestStore

Pelaporan language-tag. LangComplianceReporter mengeluarkan satu rekaman JSON terstruktur per peristiwa language-tag PDF/UA-2. Setiap rekaman membawa diskriminator peristiwa yang tetap, sebuah severitas (warn untuk penolakan mode-lax, error untuk penolakan mode-strict), tag yang melanggar secara verbatim, alasan yang dapat dibaca mesin, komponen tag yang diurai (atau null ketika tag gagal tata bahasa bentuk RFC 5646), sebuah referensi klausa ISO 14289-2 §8.4.4, dan timestamp UTC dengan mikrodetik. JSON tersebut berjalan sebagai badan pesan PSR-3; sink hilir mengurai field pesan secara langsung. ConformancePolicy adalah facade Premium atas kebijakan konformitas Core. Bakunya menerapkan penanganan bahasa UA-2 yang ketat dan menolak tag yang malformasi atau tidak terdaftar yang mencapai /Lang. Pembantu opt-out withStrictUa2(false) kembali ke perilaku lax warisan dan mencatat sebuah notice PSR-3 ketika nilai efektif benar-benar berubah. NextPDF menandai pembantu tersebut deprecated sejak v5.0 dengan target penghapusan 6.0.0. Untuk bermigrasi: audit korpus untuk nilai /Lang yang malformasi dengan composer pdfua2:audit-lang-tags <pdf-or-dir>, perbaiki, lalu hilangkan panggilan opt-out.

Penanganan e-invoice. EInvoiceValidator adalah kontrak SPI beku untuk validasi PDF-hibrida: pemeriksaan wrapper PDF/A-3, ekstraksi lampiran /AF, deteksi profil dari pengidentifikasi spesifikasi BT-24, mesin aturan-bisnis EN 16931, dan satu lintasan Schematron. PDF non-Factur-X yang well-formed mengembalikan EInvoiceValidationResult::notAnEInvoice() alih-alih melempar; hanya kegagalan I/O, struktur PDF malformasi, atau kres tooling yang memunculkan subkelas EInvoiceException. EInvoiceXmlValidator adalah validator XML lintas-tier konkret: ia menggerbang input melalui XmlGuard Core, menjalankan pra-terbang struktural dan korpus aturan semantik EN 16931 yang mendalam, dan gagal-tertutup — galat mesin muncul sebagai temuan galat, tidak pernah sebagai lolos senyap. FacturXEmbedder mengubah sumber PDF/A menjadi PDF/A-3 hibrida: ia menambahkan stream embedded-file, sebuah filespec dengan /AFRelationship yang dapat dikonfigurasi, dan sebuah paket ekstensi XMP Factur-X, lalu menulis ulang tabel cross-reference klasik. Baik array /AF katalog maupun name tree /Names /EmbeddedFiles mereferensikan lampiran, sehingga pembaca ZUGFeRD warisan menyelesaikannya.

Provenans. C2paManifestEmbedder menyematkan manifest store C2PA yang disuplai pemanggil ke dalam string byte PDF, atau mengekstraknya. ManifestStore adalah value object imutabel yang melintasi batas. Jahitan ini hanya-byte dan netral-vendor: ia tidak mensintesis klaim, mencerna referensi URI, atau menyelesaikan pengikatan hash, dan ia tidak melakukan I/O jaringan atau sistem berkas. extract() mengembalikan null saat gagal-temu dan murah pada PDF tanpa store. Setiap ekstraksi non-null telah lolos cap pengerasan JumbfBoxParser.

Modul ini melaporkan apa yang diperiksanya. Ia tidak mensertifikasi dokumen, menjadikannya mengikat secara hukum, atau menjamin bahwa keluaran apa pun memenuhi suatu regulasi. Validator e-invoice bukan validator otoritas-pajak dan mengecualikan ekstensi nasional (misalnya SDI Italia, Chorus Pro Prancis, XRechnung Jerman). Sebagaimana dinyatakan EN 16931-1, penerbit faktur tetap bertanggung jawab untuk memenuhi aturan legislasi yang relevan. Dukungan terhadap suatu standar bukanlah kesesuaian terhadapnya. Konsultasikan tim kepatuhan Anda untuk kecukupan regulasi.

  • PDF non-Factur-X yang well-formed mengembalikan hasil “bukan e-invoice”; ia tidak melempar.
  • Daftar pelanggaran aturan-bisnis yang kosong tidak dengan sendirinya berarti dokumen valid; pemeriksaan wrapper dan lampiran juga berlaku.
  • FacturXEmbedder gagal-tertutup pada sumber yang menggunakan object stream terkompresi (/Type /ObjStm) atau cross-reference stream (/Type /XRef, /XRefStm hibrida). Simpan-ulang sumber semacam itu dengan tabel cross-reference klasik terlebih dahulu.
  • Payload XML digerbang melalui XmlGuard Core: deklarasi DOCTYPE atau entity, input berukuran-berlebih, dan UTF-8 tidak valid ditolak dengan EInvoiceException pada jalur embed, atau hasil gagal pada jalur validator.
  • FacturXContractEmbedder menolak profil XRECHNUNG secara lantang alih-alih menurunkannya secara senyap; emisi XRechnung adalah kapabilitas Enterprise.
  • C2paManifestEmbedder::extract() membedakan ketiadaan (null) dari malformasi (subkelas C2paException yang menamai invarian yang dilanggar: struktur malformasi, bomb ukuran atau jumlah, siklus offset, kedalaman nesting).
  • Konstruksi ExperimentalC2paEmbedder melempar LogicException kecuali flag environment preview sama dengan '1'. Format wire-nya dipatok ke snapshot draft C2PA dan dapat berubah tanpa pemberitahuan; ia tidak mengeluarkan tanda tangan klaim. Kapabilitas ini tetap preview hingga profil PDF C2PA membeku.
  • Opt-out lax UA-2 ketat deprecated; bermigrasilah ke baku ketat (lihat Kontrak perilaku).
  • Modul ini tidak melakukan penandatanganan kriptografis. Penandatanganan klaim C2PA dan kustodi kunci berada di luar cakupan; lihat modul Security untuk perilaku penandatanganan mode-FIPS.
PerilakuAcuanStatus
Deklarasi bahasa-alami (/Lang)ISO 14289-2:2024 §8.4.4Diperiksa / dilaporkan
Model semantik faktur intiEN 16931-1:2026Diperiksa (penerbit tetap bertanggung jawab)
Berkas terasosiasi / stream berkas tersematISO 32000-2:2020 §14.13.2Dikeluarkan (/AF, /EF, /Params)
Relationship lampiran dan aturan kontainerFactur-X 1.08 §3.1, §6.2Dikeluarkan / diperiksa (baku /AFRelationship /Alternative)
Manifest store C2PA / JUMBFC2PA 2.1 §11.1Embed / extract didukung; sintesis klaim preview

Ini mencatat spesifikasi yang menjadi acuan pembangunan modul dan apa yang diperiksa atau dikeluarkannya. Ini bukan pernyataan sertifikasi atau kecukupan regulasi. NextPDF tidak memegang sertifikasi untuk standar-standar ini.

  • Bentuk rekaman reporter adalah kontrak stabil; aturan alerting hilir dapat mematok terhadap diskriminator peristiwa yang tetap.
  • Menonaktifkan UA-2 ketat mengeluarkan notice deprecation yang terlihat-telemetri hanya ketika nilai efektif berubah; menegaskan-ulang nilai saat ini adalah senyap.
  • Embedder Factur-X mempertahankan byte sumber secara verbatim dan menambahkan objek baru; ia bertujuan mempertahankan konformitas PDF/A-3 tetapi tidak memvalidasi-ulang. Salurkan output melalui validator PDF/A eksternal untuk atestasi keras.
  • Jahitan C2PA membekukan lima invarian: tanpa impor pihak-ketiga, kontrak hanya-byte, tanpa I/O, ekstraksi null-saat-gagal-temu, dan tanpa sintesis klaim di lapisan stabil.
  • Cap JumbfBoxParser adalah konstanta publik; ukur input yang Anda terima terhadapnya alih-alih menurunkan-ulang batas.

Halaman ini mendokumentasikan hanya perilaku yang dapat diamati secara eksternal dan permukaan API publik yang didukung. Jalur namespace internal, kelas pembantu, tabel mekanisme, nama berkas runbook, dan prefiks tiket berada di luar cakupan.