# Rangkuman Diskusi: Implementasi PDF dalam Sistem Stok Opname vs Pajak

Dokumen ini merangkum hasil diskusi mengenai alasan teknis pembatasan file PDF pada software akuntansi standar, perbandingannya dengan sistem e-Form pajak, serta solusi implementasinya pada aplikasi berbasis PHP mandiri.

---

## 1. Mengapa Software Akuntansi Menolak File PDF?

Software akuntansi standar (seperti Jurnal, Accurate, Kledo, dll.) umumnya mewajibkan format `.xlsx` atau `.csv` untuk *stock opname* karena alasan berikut:

* **Format Data Statis:** PDF biasa (flat PDF) bertindak seperti "foto digital". Robot/mesin pada software kesulitan membedakan dan memetakan letak kolom (misal: mana kolom `Kode Barang` dan mana kolom `Jumlah Fisik`).
* **Risiko Salah Baca (Korupsi Data):** Proses ekstraksi teks dari PDF biasa rawan memicu kesalahan karakter, seperti angka `0` dibaca huruf `O`, atau angka `1` dibaca huruf `l`.
* **Kebutuhan Sinkronisasi Real-Time:** Sistem membutuhkan struktur data mentah yang dinamis agar kalkulasi selisih stok (tambah/kurang) dapat langsung diproses ke dalam database tanpa eror.

---

## 2. Mengapa Sistem Pajak (DJP) Bisa Menerima PDF?

Sistem Direktorat Jenderal Pajak memiliki karakteristik berbeda yang memungkinkan penggunaan PDF melalui dua skema:

* **Teknologi PDF Interaktif (e-Form):** PDF yang digunakan DJP bukan PDF statis, melainkan *Acrobat Form* yang ditanamkan kode pemrograman khusus. File ini berfungsi sebagai "aplikasi mini" yang mengunci struktur kolom, sehingga server DJP dapat mengekstrak isi formulir secara presisi.
* **Fungsi sebagai Lampiran Bukti:** Pada metode e-Filing konvensional, file utama yang diproses otomatis oleh mesin tetaplah file `.csv`. File PDF hanya menjadi berkas digital pelengkap untuk kebutuhan audit manual oleh petugas pajak (*fiskus*) di kemudian hari.

---

## 3. Solusi Implementasi pada Aplikasi PHP Mandiri

Jika Anda mengembangkan aplikasi gudang menggunakan bahasa pemrograman PHP, Anda **sangat bisa** mengadopsi sistem PDF Interaktif seperti e-Form milik pajak dengan alur kerja berikut:

### Alur Kerja Sistem
1. Petugas gudang mengisi jumlah fisik langsung pada file **Interactive PDF** menggunakan tablet/HP.
2. File PDF di-upload ke aplikasi PHP Anda.
3. Skrip PHP mengekstrak data formulir (format **FDF / XFDF**) menggunakan *library* server.
4. Data hasil ekstraksi langsung dikirim ke database lewat query SQL untuk memperbarui stok.

### Contoh Implementasi Kode PHP (Menggunakan Pustaka `pdftk`)

```php
<?php
// 1. Menangkap file PDF Interaktif yang di-upload
if (isset(\(_FILES['pdf_stok'])) {\)pdfFile = \(_FILES['pdf_stok']['tmp_name'];\)outputXfdf = 'hasil_stok.xfdf';

    // 2. Ekstrak data formulir PDF menjadi format XFDF (XML) via terminal server
    exec("pdftk {\(pdfFile} generate_fdf output {\)outputXfdf}");

    // 3. Membaca data XML menggunakan SimpleXML PHP
    if (file_exists(\(outputXfdf)) {\)xml = simplexml_load_file(\(outputXfdf);\)xml->registerXPathNamespace('fdf', 'http://adobe.com');
        
        // 4. Looping untuk mengambil data dan update ke database
        foreach (\(xml->xpath('//fdf:field') as\)field) {
            \(namaField  = (string)\)field['name']; // Menjadi Kode Barang
            \(valueField = (string)\)field->value;  // Menjadi Jumlah Fisik

            // Contoh Eksekusi ke Database:
            // \$db->query("UPDATE barang SET stok_aktual = '\(valueField' WHERE kode_barang = '\)namaField'");
            echo "Produk: " . \(namaField . " \vert{} Jumlah Fisik: " . \)valueField . "<br>";
        }
        unlink(\$outputXfdf); // Hapus file temporary
    }
}
?>
```

### Tantangan Teknis yang Harus Diperhatikan
* **Konsistensi Nama Field:** Nama *input field* saat mendesain PDF di Adobe Acrobat harus sama persis dengan kolom pencarian di database MySQL Anda.
* **Konfigurasi Server:** Metode `exec()` memerlukan hak akses penuh pada server. Anda disarankan menggunakan VPS (bukan *shared hosting*) agar bisa menginstal program `pdftk-java`.
