Faktur Elektronik ZUGFeRD dari Basis Airtable: Buat JSON dan Kirim Email PDF Hibrida di Make dengan PDF4me

PDF4me Create a ZUGFeRD invoice adalah modul Make yang mengubah data faktur terstruktur menjadi faktur elektronik hibrida PDF/A-3. Dengan terhubung ke basis data Airtable, modul ini membaca satu baris, mengonversinya ke XML EN 16931, mengembalikan file yang dapat dibaca dan diurai oleh mesin, dan mengembalikannya ke dalam catatan.
Cari perangkat lunak faktur elektronik dan Anda akan mendapatkan perbandingan vendor: platform, paket perangkat lunak, harga per dokumen. Cari apakah Airtable dapat membuat faktur dan Anda akan mendapatkan penjelasan panjang lebar bahwa Airtable tidak bisa. Di antara kedua hasil tersebut, terdapat sebuah tim yang sudah menggunakan Airtable, baru saja diberi tahu bahwa faktur mereka harus dapat dibaca mesin, dan tidak ingin memindahkan operasional mereka ke platform faktur lain hanya untuk memenuhi persyaratan format. Skenario ini ditujukan untuk mereka.
Sebuah baris masuk ke dalam tabel Airtable yang berisi penjual, pembeli, satu item baris, dan total. Make mengambilnya, membangun objek JSON yang ringkas dari kolom-kolom tersebut, dan PDF4me mengubahnya menjadi PDF/A-3 dengan XML EN 16931 yang tertanam di dalamnya. File tersebut dikembalikan ke catatan sebagai lampiran dan dikirimkan ke pembeli melalui email. Lima modul, dan tidak ada yang menulis XML.
Tanya Jawab Berbasis Alasan
Why run this from Airtable rather than an invoicing product?Karena data faktur biasanya merupakan produk sampingan dari pekerjaan yang sudah dilacak di suatu tempat. Jika proyek, klien, dan tarif yang disepakati tersimpan dalam sebuah basis data, maka basis data tersebut adalah sumber kebenaran yang paling mendekati. Memindahkannya ke dalam sebuah produk untuk memenuhi format file berarti menyimpan pelanggan yang sama di dua tempat selamanya.
Why describe the invoice as JSON instead of writing the XML?Karena sintaks Faktur Lintas Industri itu panjang, sangat bertingkat, dan tidak toleran terhadap letak setiap kode. Objek JSON mengatakan hal yang sama dalam sebagian kecil ruang dengan kunci yang terbaca seperti istilah bisnis, dan PDF4me menghasilkan XML yang sesuai darinya. Bagian yang mudah salah adalah bagian yang tidak Anda kelola.
Why does the hybrid file matter?Karena faktur tersebut memiliki dua audiens. Sistem akuntansi pembeli membaca XML yang tertanam dan mencatat dokumen tersebut tanpa perlu ada yang memasukkannya secara manual; orang di bagian hutang usaha membuka file yang sama dan melihat sebuah halaman. Satu artefak memenuhi kebutuhan keduanya, itulah sebabnyaFeRD, forum Jerman yang berada di balik format tersebut, membangunnya dengan cara itu daripada hanya menentukan XML saja.
Why attach the result back to the record?Karena faktur elektronik yang tidak dapat Anda temukan kemudian hanyalah masalah yang Anda tunda. Menempatkan PDF di kolom Document pada baris tersebut mengaitkan artefak dengan data yang menghasilkannya, yang persis seperti yang Anda inginkan ketika pembeli mempermasalahkan angka tersebut delapan belas bulan kemudian.
Apa yang Akan Anda Dapatkan
Input: sebuah baris Airtable yang berisi nomor faktur, tanggal, blok penjual, blok pembeli, satu item baris, dan total, dengan Status diatur ke Baru. Output: sebuah PDF/A-3 ZUGFeRD yang dilampirkan pada catatan tersebut, dan sebuah email kepada pembeli yang berisi file yang sama.

Satu baris per faktur. Setiap kolom di sini menjadi kunci dalam JSON yang dibangun oleh skenario.

Pembeli melihat faktur biasa. Perangkat lunak mereka membaca XML di dalamnya.
Apa yang Anda Butuhkan
- A Make account.Open Make Lima modul tentang aplikasi standar.
- PDF4me API key.Get your API key Satu koneksi PDF4me mencakup skenario tersebut.
- An Airtable baseBasis data yang digunakan adalah
PDF4me Live Automationsdengan tabel bernamaZUGFeRD Requests, yang memuat header faktur, blok penjual termasuk ID PPN, blok pembeli, kolom item baris, total, kolom Email, kolom Status, dan kolom lampiran bernamaDocument. - A Gmail accountuntuk pengiriman, terhubung ke Make.
- Your seller details including a VAT ID. Tagihan tersebut berasal dari kolom, sehingga satu basis data dapat digunakan untuk menagih lebih dari satu badan hukum.
Gambaran Skenario Secara Singkat
- Watch records (Airtable) mengambil baris baru di
ZUGFeRD Requests. - Create a ZUGFeRD invoice (PDF4me) yang mengkonversi JSON menjadi PDF hibrida.
- Upload an attachment (Airtable) akan melampirkannya ke kolom
Documentpada baris yang sama. - Update a record (Airtable) akan menuliskan hasilnya kembali.
- Send an email (Gmail) akan mengirimkan faktur elektronik kepada pembeli.
Gambaran umum skenario lengkap

Bentuk lima modulnya sama seperti skenario QR Swiss. Hanya modul PDF4me di tengah yang berbeda.
Langkah 1: Bagaimana cara memicu skenario dari baris Airtable?
Alur sejauh ini: belum ada apa-apa, ini pemicunya.
Baris yang ditandai "siap" adalah permintaan untuk menerbitkan faktur.
- Tambahkan Airtable > Watch records sebagai pemicu.
- Konfigurasi:
- Basis:
PDF4me Live Automations - Meja:
ZUGFeRD Requests - Trigger field:
Created - Label field:
Title - Membatasi:
10 - Rumus:
{Status}='New'
- Basis:
Konfigurasi Watch records

Status adalah saklarnya. Tidak ada yang diterbitkan sampai seseorang mengubah status baris menjadi Baru.
Langkah 2: Bagaimana cara mengubah baris menjadi faktur ZUGFeRD?
Alur sejauh ini: pemicu Airtable.
Ini adalah modul yang menghasilkan faktur elektronik. Pengaturan menentukan format; JSON menentukan kontennya.
- Tambahkan PDF4me > Create a ZUGFeRD invoice.
- Konfigurasikan output:
- File Name:
ZUGFeRD_ditambah InvoiceNumber ditambah.pdf - Input Format:
JSON - Output Mode:
XML With PDF - ZUGFeRD Version:
2* - Conformance Level:
EN16931 - Render Invoice on PDF:
Yes
- File Name:
- Tempelkan objek faktur ke dalam Invoice JSON Data dan petakan kolom-kolomnya di:
{
"InvoiceId": "{{1.InvoiceNumber}}",
"TypeCode": "380",
"InvoiceType": "RECHNUNG",
"IssueDate": "{{formatDate(1.InvoiceDate; "YYYY-MM-DD")}}T00:00:00",
"DeliveryDate": "{{formatDate(1.InvoiceDate; "YYYY-MM-DD")}}T00:00:00",
"IsTest": false,
"Seller": {
"Name": "{{1.SellerName}}",
"VatId": "{{1.SellerVATID}}",
"Address": {
"Street": "{{1.SellerStreet}}",
"PostalCode": "{{1.SellerPostalCode}}",
"City": "{{1.SellerCity}}",
"Country": "{{1.SellerCountry}}"
}
},
"Buyer": {
"Name": "{{1.BuyerName}}",
"Address": {
"Street": "{{1.BuyerStreet}}",
"PostalCode": "{{1.BuyerPostalCode}}",
"City": "{{1.BuyerCity}}",
"Country": "{{1.BuyerCountry}}"
}
},
"LineItems": [
{
"ProductName": "{{1.ItemDescription}}",
"Quantity": {{1.Quantity}},
"UnitCode": "C62",
"UnitPrice": {{1.UnitPrice}},
"LineTotal": {{parseNumber(1.NetTotal; ".")}}
}
],
"Totals": {
"Currency": "{{1.Currency}}",
"LineTotal": {{parseNumber(1.NetTotal; ".")}},
"TaxBasisTotal": {{parseNumber(1.NetTotal; ".")}},
"TaxPercent": {{1.VATRate}},
"TaxTotal": {{parseNumber(1.VATAmount; ".")}},
"GrandTotal": {{parseNumber(1.GrossTotal; ".")}},
"ChargeTotal": 0,
"AllowanceTotal": 0
},
"Payment": {
"Currency": "{{1.Currency}}",
"PaymentReference": "{{1.InvoiceNumber}}",
"DueDate": "{{formatDate(1.DueDate; "YYYY-MM-DD")}}T00:00:00"
}
}
Tiga bagian dari objek tersebut layak untuk diperhatikan. TypeCode 380 adalah kode untuk faktur komersial dan bersifat tetap, tidak diturunkan dari apa pun di basis data. UnitCode C62 adalah kode UN/ECE untuk "satu dari sesuatu", yang Anda butuhkan untuk jam atau unit layanan. Dan blok Payment di bagian akhir berisi PaymentReference, teks yang dikutip pembeli saat mereka membayar, yang di sini hanyalah nomor faktur.
Create a ZUGFeRD invoice

Bidang tersebut dapat digulir di editor, sehingga hanya sebagian objek yang terlihat sekaligus. Blok di atas adalah keseluruhan objek tersebut.
Apa yang diputuskan oleh setiap pengaturan
| Bidang | Nilai di sini | Apa yang dikendalikannya |
|---|---|---|
| Input Format | JSON | Bahwa Anda menyediakan objek terstruktur, bukan XML atau baris CSV yang sudah jadi. |
| Output Mode | XML With PDF | Mengembalikan satu file hibrida. XML Only mengembalikan XML faktur saja. |
| ZUGFeRD Version | 2* | Generasi 2.x, yang sesuai dengan EN 16931 Versi lama 1.0 tidak sesuai. |
| Conformance Level | EN16931 | Profil yang diklaim dipenuhi oleh faktur, dan oleh karena itu kunci mana yang harus disediakan oleh JSON. |
| Render Invoice on PDF | Yes | Buatlah halaman faktur yang mudah dibaca dari data yang sama. Tanpa PDF dasar yang disediakan, inilah yang memberikan sisi manusiawi pada file tersebut. |
| Document | kosong | Di sinilah seharusnya terdapat PDF dasar dengan kop surat Anda. Biarkan kosong dan PDF4me akan menampilkan halaman polos. |
Tip.Kunci uang dan kuantitas harus datang sebagai angka mentah, bukan string yang dikutip, itulah sebabnya kunci tersebut diproses.parseNumber sementara kolom teks dibungkus dalam tanda kutip. Sebuah kutipan"1005" akan ditolak jika polos1005 diterima, dan kesalahan yang Anda dapatkan akan membahas skema, bukan tanda kutip. Perhatikan argumen kedua:parseNumber(1.NetTotal; ".") memberi tahu Make pemisah desimalnya berupa titik. Hilangkan saja dan gunakan locale yang menulis1005,00 akan menghasilkan angka yang salah daripada gagal, yang merupakan hasil terburuk.
Langkah 3: Bagaimana cara Anda memasukkan kembali faktur elektronik ke dalam catatan?
Alur sejauh ini: pemicu ditambah modul PDF4me.
- Tambahkan Airtable > Upload an attachment.
- Konfigurasi:
- Base dan Table: seperti pada langkah 1
- Record ID:
iddari pemicu. - Attachment field:
Document - File: hasil keluaran PDF4me - Create a ZUGFeRD invoice
- File name:
ZUGFeRD_ditambah InvoiceNumber ditambah.pdf - Data: Keluaran Document modul 2
- Content type:
PDF file
Upload an attachment

Content type di sini adalah PDF file. Skenario QR Swiss menggunakan gambar PNG di slot yang sama.
Langkah 4: Bagaimana cara Anda mencatat hasilnya pada baris tersebut?
Alur sejauh ini: semuanya melalui pengunggahan lampiran.
- Tambahkan Airtable > Update a record.
- Konfigurasi:
- Base dan Table: seperti pada langkah 1
- Record ID:
iddari pemicu. - Record: isi hanya apa yang ingin Anda tulis kembali, yang biasanya berupa Status dan OutputLink
Update a record

Setiap kolom dalam tabel muncul di sini. Tangkapan layar menunjukkan kolom-kolom tersebut kosong dan panelnya digulir, jadi atur Status dengan sengaja.
Tip.Kolom yang dipetakan tetapi kosong akan menghapus isi sel. Pada tabel faktur, ini berarti ID PPN kosong atau tanggal jatuh tempo yang hilang pada proses yang sebelumnya dilaporkan berhasil, jadi biarkan saja semua yang tidak Anda tulis secara sengaja.
Langkah 5: Bagaimana cara Anda mengirimkan faktur elektronik kepada pembeli?
Alur sejauh ini: semuanya melalui pembaruan catatan.
Faktur elektronik yang tersimpan di basis data belum diterbitkan.
- Tambahkan Gmail > Send an email.
- Konfigurasi:
- To: kolom Email dari pemicu
- Subject:
Your e-invoicebeserta InvoiceNumber - Body type:
Raw HTML - Content: sebuah teks HTML singkat yang menyebutkan nama pembeli, faktur, dan total.
- Tambahkan lampiran:
- File: PDF4me - Create a ZUGFeRD invoice
- File name:
ZUGFeRD_ditambah InvoiceNumber ditambah.pdf - Data: Keluaran Document modul 2
Send an email

Lampiran tersebut berasal dari modul 2, jadi Airtable tidak pernah membaca kembali file tersebut.
Jalankan Skenario dan Verifikasi
- Save skenario dan jalankan sekali.
- Tambahkan baris ke
ZUGFeRD Requestsdengan penjual, pembeli, satu item baris, kedua tanggal, dan StatusNew. - Kelima modul tersebut masing-masing harus melaporkan satu operasi.
- Buka baris tersebut: kolom
Documentseharusnya berisi file PDF yang diberi nama sesuai dengan nomor faktur. - Buka lampirannya. Anda akan melihat halaman faktur yang dapat dibaca, dan validator ZUGFeRD akan menemukan XML EN 16931 di dalam file yang sama.
- Periksa kotak masuk pembeli untuk pesan dan lampirannya.
Dalam proses yang tercatat, baris RE-2026-0009 menghasilkan faktur dari Muster GmbH di Berlin dengan ID PPN DE123456789 kepada Test Kunde AG di Muenchen, sepuluh unit Consulting seharga 100,50, dan email tersebut melaporkan total sebesar 1195,95 EUR.
Do not trust the grid for decimals.Tabel Airtable menunjukkan VATAmount 191 dan GrossTotal 1196, sedangkan faktur dan email sama-sama menunjukkan 190.95 dan 1195.95. Tidak ada yang dihitung ulang: TaxTotal dan GrandTotal dibaca langsung dari kedua kolom tersebut. Tabel hanya menampilkannya dengan presisi yang telah diatur pada kolom angka. Perluas presisi tersebut sebelum ada yang mencoba mencocokkan kolom dengan faktur, karena angka-angka tersebut hanya terlihat tidak konsisten.
Variasi Umum yang Dapat Anda Tambahkan Tanpa Membangun Ulang
Bagaimana perbandingannya dengan cara lain untuk membuat faktur elektronik?
Setiap baris menjelaskan alternatifnya. Baris terakhir adalah skenario ini.
| Perbandingan | Siapa yang menjalankannya? | Dari mana data tersebut berasal? | Apa yang Anda pertahankan |
|---|---|---|---|
| Platform e-invoicing vs skenario ini | Keuangan, melalui sebuah portal | Unggahan atau integrasi | Kontrak per dokumen dan keterkaitannya dengan kontrak tersebut. |
| Modul ERP vs skenario ini | Keuangan, di dalam ERP | Buku besar internal ERP | Lisensi, dan migrasi untuk memasukkan data Anda. |
| Pustaka pengembang vs skenario ini | Seorang pengembang, di dalam sebuah aplikasi. | Basis data Anda, melalui kode. | Kode, pembaruan skema, dan rilisnya |
| Skenario ini | Siapa pun yang dapat menambahkan baris Airtable | Basis yang sudah dimiliki tim | Lima modul dan satu objek JSON |
Pertanyaan umum
Apa itu otomatisasi hutang usaha?
Di sisi penerima, ini berarti faktur tiba, kolom-kolomnya dibaca tanpa ada yang memasukkan data secara manual, angka-angkanya diperiksa, dan hasilnya dikirim atau diteruskan untuk persetujuan. Faktur elektronik hibrida inilah yang membuat langkah pembacaan menjadi andal, karena data tersebut tertanam di dalamnya dan bukan diambil dari gambar halaman.
Skenario ini merupakan bagian pengiriman dari pengaturan tersebut. Menghasilkan file yang dapat diuraikan oleh sistem pembeli memungkinkan proses pembayaran hutang mereka berjalan tanpa pengawasan.
Bisakah Airtable membuat faktur?
Yang tidak sesuai standar. Airtable dapat menyimpan data faktur dan menampilkannya dalam antarmuka atau tampilan yang dapat dicetak, tetapi tidak dapat menghasilkan PDF/A-3 yang memuat XML sesuai standar EN 16931, dan itulah yang diminta oleh mandat faktur elektronik.
Pembagian yang digunakan dalam skenario ini adalah pembagian praktis: Airtable adalah catatan, PDF4me menghasilkan artefak, dan artefak tersebut dikembalikan ke catatan sebagai lampiran.
Bagaimana cara kerja otomatisasi pembayaran hutang?
Sistem ini bekerja dalam tiga bagian: penerimaan, ekstraksi, dan posting. Penerimaan adalah mengumpulkan dokumen di satu tempat; ekstraksi mengubahnya menjadi kolom; posting menulis kolom-kolom tersebut ke dalam buku besar, biasanya dengan gerbang kepercayaan atau persetujuan di depannya.
Faktur elektronik hibrida memangkas bagian tengah. Ketika XML sudah ada di dalam file, ekstraksi menjadi penguraian (parsing) dan bukan pengenalan (recognition), itulah sebabnya peraturan terus mendorong ke arah tersebut.
Apa itu otomatisasi Airtable?
Airtable menyediakan pembuat otomatisasi sendiri untuk pemicu dan tindakan di dalam basis data, dan itu mencakup banyak pekerjaan internal. Namun, Airtable tidak dapat memanggil API dokumen dan mengembalikan file untuk bidang lampiran, yang merupakan langkah yang dibutuhkan dalam skenario ini.
Make berada di sampingnya justru karena alasan itu. Pemicunya masih memantau tabel Airtable, tetapi bagian tengah skenario dapat mengakses layanan yang tidak dapat dijangkau oleh otomatisasi Airtable sendiri.
Penyelesaian Masalah
Buka bundel input modul di riwayat eksekusi dan baca sebagai JSON. Kolom Airtable yang kosong menyebabkan kunci kosong, dan nilai uang yang mempertahankan tanda kutipnya tiba sebagai teks di tempat yang seharusnya berupa angka. Keduanya menghasilkan objek yang terlihat baik tetapi tetap gagal dikonversi.
Conformance Level menentukan bidang mana yang dibutuhkan profil. Mengklaim EN16931 sementara JSON menghilangkan kunci yang diharapkan profil akan menyebabkan validasi gagal meskipun file terbuka secara normal. Berikan kunci yang hilang atau turun ke profil yang lebih rendah.
Render Invoice on PDF diatur ke "Tidak" dan tidak ada PDF dasar yang diberikan, sehingga XML disematkan tanpa ada gambar apa pun. File tersebut masih merupakan faktur elektronik yang valid, tetapi bagian informasi manusianya kosong.
Periksa apakah Output Mode adalah XML With PDF, lalu periksa apakah modul 3 dan 5 sama-sama mengambil data dari modul 2. Melampirkan hal lain akan mengirimkan halaman yang terlihat benar tetapi tidak berisi apa pun yang dapat dibaca oleh perangkat lunak mereka.
Langkah Selanjutnya
Mandat biasanya muncul sebagai masalah format file. Ini sebenarnya pertanyaan tentang di mana data faktur Anda sudah tersimpan, dan apakah ada perangkat lunak yang dapat membacanya.