A Document Closing ("Penutup Dokumen") is a reusable block printed at the end of a document — signatures, bank/payment details, and terms & conditions. You write it once under Settings, then optionally attach it to any transaction. It is authored in HTML + Liquid, just like a Document Template, but it is a small fragment rather than a whole page.
Signatures moved here. The built-in PDF no longer prints a fixed signature block. To show signatures on the built-in PDF, create a Document Closing that contains them — the built-in starter closing already includes a ready-made signature row.
| Concept | Description |
|---|---|
| Closing | An HTML + Liquid fragment you write and save under Settings |
| Assignment | Each transaction can optionally reference one closing |
| Optional | If no closing is assigned, nothing extra is printed |
| Reusable | Authored once and reused — unlike custom fields, it is not re-typed on every form |
A closing is shown differently depending on how the document is printed:
| Output | How the closing appears |
|---|---|
| Built-in PDF (default) | Rendered as plain text at the very bottom of the document body. HTML tags are ignored — only line breaks are kept. Liquid placeholders still work. |
| HTML template (a Document Template is assigned) | Exposed to the template as {{ closing }}. The template author places it, and its HTML renders in full. |
This is the most important thing to understand: write Liquid placeholders for both, but use real HTML layout only when you target the HTML-template path. On the built-in PDF a <table> collapses to stacked text lines.
Deactivating a closing hides it from the dropdowns without deleting it. Deleting a closing does not break transactions that used it — they simply stop showing it.
On any Create or Edit form (Sales Invoice, Purchase Invoice, Payment, Receipt, Journal, Contra, Sales/Purchase Order, Delivery/Receipt Note, etc.), find the Document Closing field next to Print Template. Pick your closing or leave it as — None —.
The choice is saved with the transaction and applied every time that document is previewed or printed.
If a transaction also has a Document Template assigned, the closing is not appended automatically — you decide where it goes by placing {{ closing }} in your template:
<!-- ... your invoice body ... -->
{% if closing != "" %}
<div class="closing" style="margin-top:12pt;">{{ closing }}</div>
{% endif %}
{{ closing }} outputs the closing's resolved HTML verbatim. The built-in starter template already includes this block just before the footer.
A closing has access to the same data model as a Document Template. All variables use {{ variable }} syntax and {% %} tags.
Availability differs by document type. Most documents expose the full model. Delivery Notes and Receipt Notes are the exception — inside their closings only
business.*andlabels.*are available;document.*andcustom_fieldsresolve to empty. Keep note closings to business-level content (signatures, bank details).
| Document type | business |
labels |
document |
custom_fields |
|---|---|---|---|---|
| Sales/Purchase Invoice, Credit/Debit Note | ✓ | ✓ | ✓ | ✓ |
| Payment, Receipt, Journal, Contra | ✓ | ✓ | ✓ | ✓ |
| Sales Order, Purchase Order | ✓ | ✓ | ✓ | ✓ |
| Delivery Note, Receipt Note | ✓ | ✓ | — | — |
| Variable | Description |
|---|---|
business.name |
Company name |
business.address |
Full formatted address |
business.logo_url |
Logo as base64 data URL |
business.phone |
Phone number |
business.email |
Email address |
business.tax_number |
Tax registration number |
business.currency |
Base currency code |
| Variable | Description |
|---|---|
document.type |
Document type name (e.g. "Sales Invoice") |
document.type_key |
Stable type key (e.g. SalesInvoice) |
document.number |
Document number (e.g. "SI-2026-0001") |
document.date / document.date_long |
Date, short / long format |
document.due_date / document.due_date_long |
Due date, short / long format |
document.reference_number |
Reference / supplier document number |
document.narration |
Notes / description |
document.currency |
Currency code (e.g. "IDR") |
document.salesman / document.project |
Salesman / project name (if any) |
document.amount_in_words |
Grand total in words |
| Variable | Description |
|---|---|
document.subtotal |
Total before tax and discount |
document.total_discount |
Total discount amount |
document.total_tax |
Total tax amount |
document.total_wht |
Total withholding tax |
document.grand_total |
Final payable amount |
document.balance_due |
Grand total minus applied advances |
| Variable | Description |
|---|---|
document.party.name |
Party name |
document.party.address |
Full formatted address |
document.party.tax_number |
Party tax number |
document.party.phone |
Party phone number |
The full line-item collection (document.items, with item.item_name, item.quantity, item.amount, …) and document custom fields (custom_fields.header, each with .name / .value / .show_in_preview) are also available — see the Document Templates reference for the complete list. They are rarely needed in a closing, which usually shows only signatures, bank details, and terms.
Use {{ labels.* }} for text that adapts to the active app language (English / Indonesian / Arabic).
| Variable | English | Indonesian |
|---|---|---|
labels.received_by |
Received by | Diakui Pelanggan |
labels.approved_by |
Approved by | Disetujui Oleh |
labels.prepared_by |
Prepared by | Disiapkan Oleh |
labels.notes |
Notes / Terms | Catatan / Syarat |
labels.amount_in_words |
Amount in Words | Terbilang |
labels.grand_total |
Total | Total |
labels.date |
Date | Tanggal |
labels.page |
Page | Halaman |
(The complete labels.* set is listed under Document Templates.)
| Filter | Example | Output |
|---|---|---|
money |
{{ document.grand_total \| money }} |
1,500,000.00 (EN) / 1.500.000,00 (ID) |
money0 |
{{ document.grand_total \| money0 }} |
1,500,000 (no decimals) |
upcase / downcase |
{{ document.type \| upcase }} |
SALES INVOICE |
<table style="width:100%; margin-top:18pt; font-size:9pt; border-collapse:collapse;">
<tr>
<td style="width:33%; text-align:center;">{{ labels.received_by }}<br><br><br>____________________</td>
<td style="width:33%; text-align:center;">{{ labels.approved_by }}<br><br><br>____________________</td>
<td style="width:33%; text-align:center;">{{ labels.prepared_by }}<br><br><br>____________________</td>
</tr>
</table>
<div style="margin-top:10pt; font-size:8.5pt; color:#555;">
Please pay to: BCA 123-456-7890 a.n. {{ business.name }}<br>
Amount due: {{ document.grand_total | money }} {{ document.currency }}
</div>
<div style="margin-top:8pt; font-size:8pt; color:#777;">
<strong>{{ labels.notes }}</strong><br>
Goods sold are not returnable. Payment due within 30 days of the invoice date.
</div>
<table> and <div> are stripped on the built-in PDF; only line breaks (<br>, end of </p>/</div>/</tr>) survive. Design built-in closings as clean lines with Liquid placeholders; reserve rich HTML layout for the HTML-template path.{{ closing }}.business.* and labels.* only.closing value (and the full model) to the browser console on the preview page.