Generate Indonesian construction quotation/proposal PDFs (Surat Penawaran). Use when creating proposals for bored pile drilling, construction services, or similar project quotes in Indonesian. Supports custom items, pricing, and terms.
Generate Indonesian construction proposal PDFs matching KBI's standard quotation format.
# Generate HTML
python3 skills/create-proposal/scripts/generate_proposal.py data.json output.html
# Convert to PDF (Chrome headless)
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --disable-gpu --no-pdf-header-footer --print-to-pdf=output.pdf file://$(pwd)/output.html
| NO | Deskripsi | Qty | Satuan | Harga Satuan (Rp) | Jumlah (Rp) |
Payment terms, responsibilities, pricing conditions
{
"nomor": "KQ-018/QUO-KBI/I/2026",
"tanggal": "Samboja, 29 Januari 2026",
"kepada": "PT. SCS",
"lokasi_proyek": "Renovasi RSUD Kondosapata Mamasa",
"alat": "Bored Pile Machine",
"items": [
{
"no": 1,
"deskripsi": "Pengeboran Bored Pile Ø60",
"sub_items": [
{"deskripsi": "a. Pengeboran Tanah", "qty": 2496, "satuan": "m¹", "harga_satuan": 400000},
{"deskripsi": "b. Pengeboran Batu", "qty": 1, "satuan": "m¹", "harga_satuan": 1000000, "rate_only": true}
]
},
{"no": 2, "deskripsi": "Jasa Pengecoran", "qty": 365.75, "satuan": "mᶟ", "harga_satuan": 150000},
{"no": 3, "deskripsi": "Jasa Pembesian", "qty": 13457.21, "satuan": "Kg", "harga_satuan": 2000},
{"no": 4, "deskripsi": "Persiapan", "qty": 1, "satuan": "Ls", "harga_satuan": 100000000}
],
"keterangan": ["Custom terms..."],
"direktur_name": "ARIANTO GAN"
}
rate_only: true — Shows "Rate Only" instead of calculated totalexclude_from_total: true — Excludes from Nilai Jasa calculationsub_items — Nested items under a parent rowm¹ — linear metermᶟ — cubic meterKg — kilogramLs — lump sumassets/kbi-logo.jpg — KBI logo for letterheadassets/signature-stamp.jpeg — Director signature stamp