Registry entry

Indonesia Annual Individual Income Tax Return — Form 1770 S (SPT Tahunan Pajak Penghasilan Wajib Pajak Orang Pribadi Formulir 1770 S)

File Indonesia's annual individual income tax return using Form 1770 S through the Direktorat Jenderal Pajak's (DJP, Directorate General of Taxes) e-Filing web application on djponline.pajak.go.id. Form 1770 S is for an individual taxpayer with income from one or more employers, plus other domestic income and/or income subject to final/definitive tax — the middle of DJP's three individual annual-return forms (1770 SS for gross income under Rp60 million from a single employer; 1770 S for one-or-more-employer salaried filers above that threshold; 1770 for filers who also run a business or independent profession). Opens Indonesia's Taxes vertical (its 3rd of 6 verticals modelled, after DMV and Business Formation). Covers the e-Filing wizard's own five-page 'SPT 1770 S dengan formulir' flow: return metadata (tax year, normal/amended status), Lampiran II (final/definitive-tax income, year-end assets, year-end debts, and the family/dependents register), Lampiran I (other domestic income not subject to final tax, income excluded from the tax object, and withholding certificates issued by other parties), and the Induk (main form) covering marital status, net income, the non-taxable-income (PTKP) status/dependent-count selection, Article 24 foreign-tax-credit adjustment, Article 25 self-paid installments, the following tax year's Article 25 installment basis, and the closing declaration. Scoped to a resident individual taxpayer using the 1770 S form's own 'dengan bentuk formulir' (structured-form) filing pathway; the alternative 'dengan panduan' (guided-interview) and 'dengan upload SPT' (bulk-file-upload) pathways, the account login/NIK-NPWP-password/CAPTCHA screen, the OTP-style e-mail/SMS verification-code exchange used only to authorize submission, the post-submission satisfaction survey, and every DJP-calculated subtotal/control-total field (Penghasilan Neto totals, Penghasilan Kena Pajak, PPh Terutang, Jumlah Kredit Pajak, and the final Nihil/Kurang Bayar/Lebih Bayar status) are all out of scope for this v1.0.0 — see VERIFICATION.md. This document does not submit a tax return; djponline.pajak.go.id and DJP are always authoritative.

Registry entry

id/djp/annual-individual-income-tax-return-1770s

Jurisdiction
Indonesia · national
Version
1.0.0
Verification
draft

Authoritative source DJP official guide 'Tata Cara Pengisian SPT Tahunan Wajib Pajak Orang Pribadi 1770S' (Modul Pengisian SPT Tahunan e-Filing Orang Pribadi 1770S, dated 2023-03-13), a 46-slide screenshot-driven walkthrough of the djponline.pajak.go.id e-Filing wizard

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

55 fields across 11 steps, read from the published schema.json, with names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.

Return metadata (tax year, normal/amended status)

  • taxYear integer required

    The fiscal year this SPT Tahunan covers, selected from the 'Data Formulir' screen's own year dropdown. Confirmed example value: 2022.

    range: 2000–2099
  • sptStatus enum required

    Whether this is a first-time (Normal) filing for the tax year or a corrected (Pembetulan) filing.

    enum: normal | pembetulan
  • amendmentNumber integer optional

    Which numbered amendment this filing is, when sptStatus is 'pembetulan'. Disabled and fixed at 0 in the wizard when sptStatus is 'normal'.

    range: 1–∞

Lampiran II Bagian A — income subject to final/definitive tax

  • hasFinalIncome boolean required

    Gates whether the taxpayer reports at least one Lampiran II Bagian A (Penghasilan yang dikenakan PPh Final dan/atau bersifat final) entry, e.g. bank deposit/savings interest. The wizard presents this section as an empty add-a-row table ('Tambah+') rather than a literal yes/no question; this field is an inferred gate, mirroring this registry's established convention for guide-derived add-a-row sections (e.g. br/rfb/individual-income-tax-return-irpf). The real table repeats once per income source; this document models a single, primary entry only.

  • finalIncomeSourceType string optional

    DJP's own final-tax income-source code, selected from a dropdown. Only one example option is legible in the guide's own screenshot ('1. Bunga Deposito, Tabungan, Diskonto SBI, ...'); the full code list is not reproduced there and is not modelled as an enum — flagged as a judgment call.

    length: 0–200
  • finalIncomeGrossAmount number optional

    DPP/Penghasilan Bruto (Rp) (gross income/tax base subject to final tax)

  • finalIncomeTaxDueAmount number optional

    PPh Terutang (Rp) (final tax due on this income)

Lampiran II Bagian B — assets at year end

  • hasAssetsAtYearEnd boolean required

    Gates whether the taxpayer reports at least one Lampiran II Bagian B (Harta Pada Akhir Tahun) asset entry. Inferred gate for an add-a-row table (see hasFinalIncome); the real table repeats once per asset (the guide's own worked example lists three: two savings accounts and one motorcycle). This document models a single, primary asset entry only.

  • assetCode string optional

    DJP's own asset-type code, selected from a dropdown (the guide's worked example uses '012' for a savings account and '042' for a motorcycle). The full code table is not reproduced in the guide and is not modelled as an enum.

    length: 0–10
  • assetName string optional

    Example values from the guide's worked example: 'Tabungan' (savings), 'Sepeda Motor' (motorcycle).

    length: 0–100
  • assetAcquisitionYear integer optional

    Example values from the guide's worked example: 2022, 2021.

    range: 1900–2099
  • assetAcquisitionValue number optional

    Example values from the guide's worked example: Rp2,000,000; Rp1,000,000; Rp18,500,000.

  • assetDescription string optional

    Free-text note about the asset. Example values from the guide's worked example: 'Bank Sendiri', 'BCI', 'Kredit'. Whether this specific sub-field is itself optional within an otherwise-required row is not distinguishable from the guide's screenshots; modelled with the same requiredWhen as its sibling fields for consistency — flagged as a judgment call.

    length: 0–200

Lampiran II Bagian C — debts/liabilities at year end

  • hasDebtsAtYearEnd boolean required

    Gates whether the taxpayer reports at least one Lampiran II Bagian C (Kewajiban/Utang Pada Akhir Tahun) debt entry. Inferred gate for an add-a-row table; the real table repeats once per debt/loan. This document models a single, primary debt entry only.

  • debtCode string optional

    DJP's own debt-type code, selected from a dropdown (the guide's worked example uses '101'). The full code table is not reproduced in the guide and is not modelled as an enum.

    length: 0–10
  • lenderName string optional

    Example value from the guide's worked example: 'Adadeh'.

    length: 0–100
  • lenderAddress string optional

    Example value from the guide's worked example: 'Balikpapan'.

    length: 0–200
  • loanYear integer optional

    Example value from the guide's worked example: 2021.

    range: 1900–2099
  • loanBalanceAmount number optional

    The remaining balance owed as of 31 December of the tax year. Example value from the guide's worked example: Rp10,000,000.

Lampiran II Bagian D — family/dependents register

  • hasFamilyMembersListed boolean required

    Gates whether the taxpayer reports at least one Lampiran II Bagian D (Daftar Susunan Anggota Keluarga) entry. Inferred gate for an add-a-row table; the real table repeats once per family member. Unlike the sibling Harta/Utang tables, the guide's own screenshot of this table was not populated with a worked example row — only its column headers (Nama, NIK, Hubungan Keluarga, Pekerjaan) are confirmed. This document models a single, primary family-member entry only.

  • familyMemberName string optional

    Nama (family member's name)

    length: 0–100
  • familyMemberNik string optional

    16-digit Nomor Induk Kependudukan of the registered family member.

    patternclassification: sensitive-pii
  • familyMemberRelationship string optional

    DJP's own family-relationship code/label (e.g. spouse, child); the underlying option list is not shown in the guide's screenshot (no worked example row was captured for this table) and is not modelled as an enum — flagged as a judgment call.

    length: 0–50
  • familyMemberOccupation string optional

    Pekerjaan (family member's occupation)

    length: 0–100

Lampiran I Bagian A — other domestic income not subject to final tax

  • otherDomesticInterestIncome number optional

    Lampiran I Bagian A, line 1 — Penghasilan Neto Dalam Negeri Lainnya (other domestic net income not subject to final tax): interest income. This is a fixed, always-visible line on the wizard's own static form (not an add-a-row table), so no inferred gate is used; the taxpayer enters 0 if not applicable.

  • otherDomesticRoyaltyIncome number optional

    Lampiran I Bagian A, line 2.

  • otherDomesticRentIncome number optional

    Lampiran I Bagian A, line 3.

  • otherDomesticPrizeIncome number optional

    Lampiran I Bagian A, line 4.

  • otherDomesticAssetSaleGainIncome number optional

    Lampiran I Bagian A, line 5.

  • otherDomesticMiscIncome number optional

    Lampiran I Bagian A, line 6.

Lampiran I Bagian B — income excluded from the tax object

  • nonTaxableGrantAmount number optional

    Lampiran I Bagian B, line 1 — Penghasilan yang Tidak Termasuk Objek Pajak (income excluded from the tax object). Fixed, always-visible static-form line; taxpayer enters 0 if not applicable.

  • nonTaxableInheritanceAmount number optional

    Lampiran I Bagian B, line 2.

  • nonTaxablePartnershipProfitShareAmount number optional

    Lampiran I Bagian B, line 3 — profit share as a non-share-based member of a limited partnership (CV), partnership, association, firm, or kongsi.

  • nonTaxableInsuranceClaimAmount number optional

    Lampiran I Bagian B, line 4.

  • nonTaxableScholarshipAmount number optional

    Lampiran I Bagian B, line 5.

  • nonTaxableOtherAmount number optional

    Lampiran I Bagian B, line 6.

Lampiran I Bagian C — withholding certificates from other parties

  • hasWithholdingCertificate boolean required

    Gates whether the taxpayer reports at least one Lampiran I Bagian C (Daftar Pemotongan/Pemungutan PPh Oleh Pihak Lain dan PPh Yang Ditanggung Pemerintah) entry, e.g. the Form 1721-A1 PPh Pasal 21 certificate an employer issues. Inferred gate for an add-a-row table; the real table repeats once per withholding certificate. This document models a single, primary certificate entry only.

  • withholdingTaxType string optional

    DJP's own withholding-tax-type code, selected from a dropdown. Only one example option is legible in the guide's own screenshot ('PPh Pasal 21'); the full code list is not reproduced there and is not modelled as an enum — flagged as a judgment call.

    length: 0–50
  • withholdingAgentTaxId string optional

    The 15/16-digit NPWP of the employer/entity that issued the withholding certificate.

    length: 0–20
  • withholdingAgentName string optional

    Example value from the guide's worked example: 'PT Punya Nya Raka'.

    length: 0–100
  • withholdingCertificateNumber string optional

    Example value from the guide's worked example: '1.1.12.22.0000001', from a Formulir 1721-A1 certificate.

    length: 0–30
  • withholdingCertificateDate date optional

    Example value from the guide's worked example: 31-12-2023 (as printed on the certificate, for a preceding-year filing example).

  • withholdingTaxAmount number optional

    Example value from the guide's worked example: Rp4,951,650.

Induk — marital status and net income

  • maritalStatus enum required

    Status Perkawinan (marital status)

    enum: tidak_kawin | kawin
  • domesticEmploymentNetIncome number required

    Induk A, line 1 — carried from the taxpayer's Formulir 1721-A1/A2 withholding certificate (line 12, Jumlah Penghasilan Neto). Required because Form 1770 S is scoped to taxpayers whose income is from one or more employers.

  • foreignNetIncome number optional

    Induk A, line 3.

  • mandatoryZakatDonationAmount number optional

    Induk A, line 5 — deductible mandatory religious alms/donation.

Induk — non-taxable-income status and tax-due adjustments

  • ptkpStatusCode string required

    DJP's own combined marital/dependent PTKP (Penghasilan Tidak Kena Pajak) status code (e.g. TK for Tidak Kawin/unmarried). Only one example option ('Tidak Kawin/TK') is legible in the guide's own screenshot; the full code table (which publicly documented DJP guidance shows also includes K and K/I variants, each with a dependent-count suffix) is not reproduced in this guide and is not modelled as an enum — flagged as a judgment call.

    length: 0–10
  • numberOfDependentsForPtkp integer required

    The count of dependents used in the PTKP calculation. The guide's own screenshot confirms only the value 0; the statutory 0-3 cap is well-documented public DJP PTKP policy, not itself shown as a full dropdown list in this guide — flagged as a judgment call.

    range: 0–3
  • article24CreditRefundAmount number optional

    Induk C, line 10.

  • article25SelfPaidInstallmentAmount number optional

    Induk D, line 14a.

  • article25STPPrincipalAmount number optional

    Induk D, line 14b — the principal-tax-only portion of an STP (Surat Tagihan Pajak) for Article 25 installments.

Induk — next year's installment basis and closing declaration

  • nextYearInstallmentBasisType string optional

    Selected from a dropdown labelled only 'Pilih..' in the guide's own screenshot; no option values are legible at any resolution captured, so this is modelled as an open string rather than a fabricated enum — flagged as a judgment call, this document's weakest-sourced field.

    length: 0–100
  • nextYearInstallmentAmount number optional

    Angsuran PPh Pasal 25 Tahun Pajak Berikutnya (Rp) (next tax year's Article 25 installment amount)

  • declarationAgreement boolean required

    The taxpayer's affirmative agreement that the return, 'with full awareness of all consequences including sanctions under applicable law', is true, complete, and clear. Must be checked before the wizard allows proceeding to submission.

Verification record

This file is the source-review record for this document version, per the manual-source-review-v1 practice. It documents the provenance of the published fields and flow and states the current verification claim honestly.

Current claim

  • status: draft
  • verification.method: manual-source-review-v1
  • verification.lastVerifiedAt: 2026-07-07

The document was derived from a directly-read primary source: the Direktorat Jenderal Pajak's (DJP) own official guide, "Tata Cara Pengisian SPT Tahunan Wajib Pajak Orang Pribadi 1770S" (Modul Pengisian SPT Tahunan e-Filing Orang Pribadi 1770S, dated 2023-03-13) — a genuine, 46-slide, screenshot-driven walkthrough of the live djponline.pajak.go.id e-Filing wizard, retrieved directly from pajak.go.id's own web root with no login/CAPTCHA/WAF gate. It remains draft, not verified, because the live wizard itself was not walked interactively (it requires a real NIK/NPWP + password + CAPTCHA login — see "Access constraint" below), per this registry's structural-reference maturity convention.

Why this document exists

This is a GovSchema Standard Research cycle (GOV-1560). Indonesia opened as the registry's 18th jurisdiction in a prior cycle (GOV-1546, Business Formation) and gained a DMV schema in the cycle immediately after (GOV-1553), but had only 2 of its 6 verticals modelled; Passport, Visa, Taxes, and National ID were all open, unscreened backlog candidates. This cycle screened all four before picking Taxes:

  • Passport (Direktorat Jenderal Imigrasi's M-Paspor mobile app) — screened via secondary how-to articles only; every source found describes the account-creation and document-upload flow at a checklist level (personal data, e-KTP upload, emergency contact, family-card group application) without a single field-by-field screenshot walkthrough comparable to BKPM's OSS guide. Left open, not a dead end — a future cycle should look for M-Paspor's own official user manual, if one is published, before attempting a live-app walk.
  • Visa (evisa.imigrasi.go.id) — a genuine official "User Manual e-Visa" PDF was found and fully read (18 pages, no login/CAPTCHA/WAF gate, kemlu.go.id-hosted mirror of the Directorate General of Immigration's own document). It is well-sourced for the visa-type-selection wizard (passport nationality, visa sub-purpose e.g. "Golden Visa", visa category e.g. "Investment", applicant type e.g. "Individual Investor", length of stay e.g. "5 years" — each with a confirmed worked example) and for the passport-photo/document-upload requirements and payment-method screens (Credit Card vs. Simponi, with the credit-card sub-fields fully visible). It is genuinely weaker at its core: the "Fill Form" step's own Personal Information block (the section that would carry the actual applicant's name/DOB/address/etc.) is rendered only as an unlabelled wireframe diagram — dashed placeholder rectangles with no field labels at any page or resolution — a level of abstraction this registry's existing e-Visa/ICP schemas do not share. Not picked this cycle in favour of a source with a fully labelled core; left open as a real candidate for a future cycle, contingent on finding either a richer manual or (per this registry's established caution around scarce/authenticated bookings) a way to inspect the live wizard's Personal Information step without creating a real account.
  • National ID (Dukcapil KTP-el / NIK registration) — confirmed, via Dukcapil's own site and multiple secondary guides, to be an in-person, biometric (photo/fingerprint/iris) enrolment process with no online application-form channel; Dukcapil's own site explicitly states it provides no web/app channel even for NIK lookup. A confirmed weak/no-online-channel candidate, consistent with this registry's treatment of Mexico's CURP and Brazil's CIN — not attempted further.
  • Taxes (DJP e-Filing, Form 1770 S) — selected. DJP's own official step-by-step e-Filing guide for Form 1770 S is a genuine, full, field-by-field screenshot walkthrough of the live djponline.pajak.go.id wizard, including a complete worked example (taxpayer "Nn Shinta", tax year 2022) carried consistently from login through the final submission receipt. This is the strongest single source found this cycle by a wide margin — richer than the Visa candidate's own Personal Information gap, and directly comparable in shape to ph/bir/annual-income-tax-return-1701a and br/rfb/individual-income-tax-return-irpf, both already in this registry.

Source examined

  • Document (id, version): id/djp/annual-individual-income-tax-return-1770s / 1.0.0
  • Spec version: GovSchema 0.3.0
  • Authority: Direktorat Jenderal Pajak (DJP), Indonesia
  • Primary source URL: https://www.pajak.go.id/sites/default/files/2023-03/Modul%20Pengisian%20SPT%20Tahunan%20e-Filling%20Orang%20Pribadi%201770S.pdf
  • Official document title: "Tata Cara Pengisian SPT Tahunan Wajib Pajak Orang Pribadi 1770S" (cover slide), file metadata title "PowerPoint Presentation", authored 2023-03-13
  • Retrieved / reviewed: 2026-07-07 (curl confirms HTTP 200, 2,322,956 bytes, directly from www.pajak.go.id, no login/CAPTCHA/WAF gate)
  • Reviewer: GovSchema Engineering (initial authoring source-review)

Access constraint and how it was worked around

The PDF itself is a plain, directly downloadable file hosted on DJP's own web root — no login, no CAPTCHA. It is a PowerPoint-to-PDF export (46 slides) with a sparse, non-representative text layer; the actual in-app field labels only exist inside each slide's embedded screenshot. Every field in this schema was read directly off those rendered screenshots — each of the 46 pages rendered at 2.2x scale via pdfjs-dist + node-canvas (the same technique already used for id/bkpm/oss-nib-registration-individual-umk and several AE ICP/RAKEZ documents in this registry) and read with Claude's own vision capability. The live wizard (djponline.pajak.go.id) itself requires a real NIK/NPWP + password + CAPTCHA login and was not walked interactively — consistent with this registry's practice of never creating or using real taxpayer credentials on a live government tax-filing system.

What was confirmed directly (verbatim, from the rendered screenshots)

  • Login screen (not modelled): NIK/NPWP field (worked example 123456789000000), Kata Sandi (password), a distorted-text captcha ("Tuliskan ulang kode kemanan"), "Lupa Kata Sandi?" and "Daftar disini" links — account credentials, excluded per this registry's standing convention.
  • "Pilih SPT" eligibility screen (not modelled as fields): three Ya/Tidak questions ("Apakah Anda Menjalankan Usaha atau Pekerjaan bebas?", "Apakah Anda seorang Suami atau Istri yang menjalankan kewajiban perpajakan terpisah (MT) atau Pisah Harta (PH)?", "Apakah Penghasilan Bruto Yang Anda Peroleh selama setahun Kurang dari 60 Juta Rupiah?") determine which of Forms 1770/1770S/1770SS the wizard routes the filer to, followed by a three-way form-entry-mode choice ("Dengan bentuk formulir" / "Dengan panduan" / "Dengan upload SPT"). This document is scoped entirely to the 1770S-with-structured-form pathway (all three questions answered Tidak/Tidak/Tidak in the worked example, then "Dengan bentuk formulir" selected); the eligibility branching itself, and the alternative guided-interview/bulk-upload entry modes, are out of scope.
  • Data Formulir screen (page 1 of 5): Tahun Pajak (dropdown, worked value 2022), Status SPT (Normal/Pembetulan radio, Normal selected), Pembetulan Ke (locked at 0 under Normal).
  • Lampiran II Bagian A (Penghasilan yang dikenakan PPh Final): an add-a-row table (columns Sumber/Jenis Penghasilan, DPP/Penghasilan Bruto, PPh Terutang) with a "Bukti Potong Baru"-style "Tambah+" modal exposing Sumber/Jenis Penghasilan (dropdown, one option legible: "1. Bunga Deposito, Tabungan, Diskonto SBI, ..."), DPP/Penghasilan Bruto, and PPh Terutang. Empty in the worked example ("Tidak ditemukan data yang sesuai").
  • Lampiran II Bagian B (Harta Pada Akhir Tahun): a populated worked table — Kode Harta/Nama Harta/Tahun Perolehan/Harga Perolehan/Keterangan — with three real rows: 012/Tabungan/2022/Rp2,000,000/"Bank Sendiri"; 012/Tabungan/2022/Rp1,000,000/"BCI"; 042/Sepeda Motor/2021/ Rp18,500,000/"Kredit". The "Harta Baru" add modal confirms the same five fields plus their input types (two dropdowns for Kode Harta/Tahun Perolehan, three text/textarea inputs).
  • Lampiran II Bagian C (Kewajiban/Utang Pada Akhir Tahun): a populated worked table — Kode Utang/Nama Pemberi Pinjaman/Alamat Pemberi Pinjaman/Tahun Peminjaman/Jumlah — with one confirmed row: 101/Adadeh/Balikpapan/2021/Rp10,000,000, and a "Sub Total"/"Jumlah Bagian C (JBC)" of Rp10,000,000 across "4 data" (only one row's values are legible in the captured screenshot). The "Hutang Baru" add modal confirms the same five input fields.
  • Lampiran II Bagian D (Daftar Susunan Anggota Keluarga): column headers Nama/NIK/Hubungan Keluarga/Pekerjaan are confirmed, but the table itself is shown empty ("Tidak ditemukan data yang sesuai") in every captured screenshot — no worked example row exists for this specific block, unlike its Harta/Utang siblings.
  • Lampiran I Bagian A (Penghasilan Neto Dalam Negeri Lainnya): a fixed, always-visible 6-line static form — Bunga / Royalti / Sewa / Hadiah / Keuntungan dari Penjualan/Pengalihan Harta / Penghasilan Lain — each a single numeric input, with a computed "Jumlah Bagian A" total (not modelled, per this registry's no-computed-fields discipline).
  • Lampiran I Bagian B (Penghasilan yang Tidak Termasuk Objek Pajak): another fixed 6-line static form — Bantuan/Sumbangan/Hibah / Warisan / Bagian Laba Anggota Perseroan Komanditer tidak atas saham, persekutuan, perkumpulan, firma, kongsi / Klaim Asuransi Kesehatan, Kecelakaan, Jiwa, Dwiguna, Beasiswa / Beasiswa / Penghasilan Lainnya yang tidak termasuk Objek Pajak — with a computed "Jumlah Bagian B" total (not modelled).
  • Lampiran I Bagian C (Daftar Pemotongan/Pemungutan PPh Oleh Pihak Lain dan PPh Yang Ditanggung Pemerintah): an add-a-row table (columns Nama Pemotong/Pemungut Pajak, NPWP Pemotong/Pemungut Pajak, Nomor Bukti, Tanggal Bukti, Jenis Pajak, Jumlah Dipotong) whose "Bukti Potong Baru" add modal is shown fully populated with a real worked example, cross- referenced against an actual scanned Formulir 1721-A1 withholding certificate in the same screenshot: Jenis Pajak "PPh Pasal 21", NPWP Pemotong 120267906000000, Nama Pemotong "PT Punya Nya Raka", Nomor Bukti 1.1.12.22.0000001, Tanggal Bukti 31-12-2023, Jumlah PPh Dipotong Rp4,951,650 — this last figure is independently cross-checked against the scanned certificate's own line 20 ("PPh PASAL 21 DAN PPh PASAL 26 YANG TELAH DIPOTONG DAN DILUNASI: 4.951.650").
  • Induk > Identitas: Status Perkawinan (Tidak Kawin/Kawin radio, Tidak Kawin selected).
  • Induk > A. PENGHASILAN NETTO: line 1 (Penghasilan Neto Dalam Negeri Sehubungan dengan Pekerjaan) shown editable and pre-filled Rp127,011,178 — cross-referenced directly against the same worked Formulir 1721-A1's own line 12 (JUMLAH PENGHASILAN NETO); line 2 (Penghasilan Neto Dalam Negeri Lainnya) shown greyed/computed at 0; line 3 (Penghasilan Neto Luar Negeri) shown as a genuinely editable blank box; line 4 (Jumlah, computed) shown greyed; line 5 (Zakat/Sumbangan Keagamaan yang Sifatnya Wajib) shown as a genuinely editable blank box; line 6 (computed) shown greyed.
  • Induk > B. PENGHASILAN KENA PAJAK: line 7 shows two side-by-side dropdowns — the first pre-selected "Tidak Kawin/TK", the second pre- selected "0" — feeding a third, greyed, computed PTKP-amount box (Rp54,000,000); line 8 (Penghasilan Kena Pajak, computed) shown greyed.
  • Induk > C. PPh TERUTANG: line 9 (computed) shown greyed at Rp4,951,650; line 10 (Pengembalian/Pengurangan PPh Pasal 24 yang telah dikreditkan) shown as a genuinely editable blank box; line 11 (computed) shown greyed.
  • Induk > D. KREDIT PAJAK: line 12 (computed, auto-populated from the Bukti Potong total) shown greyed at Rp4,951,650; line 13 (computed) shown greyed at 0; line 14a (PPh Yang dibayar Sendiri — PPh Pasal 25) and line 14b (STP PPh Pasal 25, Hanya Pokok Pajak) both shown as genuinely editable blank boxes; line 15 (computed) shown greyed.
  • Induk > E. PPh KURANG/LEBIH BAYAR: line 16 shows a computed "Nihil" status label with a greyed amount box (0) — not modelled (system-derived filing outcome, not filer input).
  • Induk > F. ANGSURAN PPh PASAL 25 TAHUN PAJAK BERIKUTNYA: line 18 shows a dropdown labelled only "Pilih.." (no option text ever legible) alongside a genuinely editable blank amount box.
  • Pernyataan: a single "Setuju" checkbox against the standard statutory declaration text, gating the "Selanjutnya"/proceed-to-submission button.
  • Kirim step (not modelled): a media-choice (Email/SMS) for a one-time verification code, the code-entry field itself, the "Kirim SPT" submit button, a post-submission satisfaction survey ("Puas"/"Tidak Puas"), and the final e-mailed "Bukti Penerimaan Elektronik" receipt — all excluded as ephemeral submission mechanics/account-session data, not durable application content, the same discipline this registry applies to OTP codes and login screens elsewhere (e.g. id/bkpm/oss-nib-registration- individual-umk's excluded WhatsApp OTP).

Judgment calls / scope cuts (read before reviewing)

  1. Six dropdown fields lack a confirmed full option list and are modelled as open strings, not enums: finalIncomeSourceType, assetCode, debtCode, withholdingTaxType, ptkpStatusCode, and nextYearInstallmentBasisType each show at most one selected/example value in the guide's own screenshots. Per this registry's established discipline (e.g. id/bkpm's undocumented-dropdown treatment), none of these are modelled as enum — each field's description states exactly what was and was not confirmed. nextYearInstallmentBasisType is the weakest of the six: its dropdown shows no legible option text at all, only the placeholder "Pilih..".
  2. ptkpStatusCode and numberOfDependentsForPtkp reference Indonesia's public PTKP (Penghasilan Tidak Kena Pajak) status-code convention (TK/K/ K-I, dependents 0-3) in their own description fields, but only the single worked value (Tidak Kawin/TK, 0 dependents) is directly confirmed in the guide's own screenshot. This is disclosed explicitly in each field's description rather than silently presented as a directly-sourced enum; a future reviewer with live-wizard access should confirm the full dropdown contents.
  3. Six repeating add-a-row sections are each bounded to a single entry: hasFinalIncome/Lampiran II Bagian A, hasAssetsAtYearEnd/Bagian B, hasDebtsAtYearEnd/Bagian C, hasFamilyMembersListed/Bagian D, and hasWithholdingCertificate/Lampiran I Bagian C are each modelled with a single inferred boolean gate and one bounded entry, per GovSchema v0.3's lack of a repeating/array field type (SPEC.md, and this registry's standing precedent in br/rfb/individual-income-tax-return-irpf and others). The worked example itself shows Bagian B (assets) with three real rows and Bagian C debts with at least four rows ("Menampilkan 1 sampai 4 dari 4 data"), confirming the real-world cardinality this scope-cut deliberately does not capture.
  4. hasFamilyMembersListed's worked table has no example row, unlike its Harta/Utang siblings — every captured screenshot of Lampiran II Bagian D shows only the empty-state message. The field/column labels themselves (Nama, NIK, Hubungan Keluarga, Pekerjaan) are still directly read from the table's own header row, not inferred.
  5. All DJP/system-computed subtotal and outcome fields are excluded: Jumlah Bagian A/B/C, Induk lines 2/4/6/8/9/11/12/13/15, and the final Nihil/Kurang Bayar/Lebih Bayar status (line 16) are each shown visually greyed-out and auto-populated in the source screenshots — consistent with this registry's standing discipline (see br/rfb's VERIFICATION.md) of never modelling authority-calculated totals as filer-entered fields.
  6. domesticEmploymentNetIncome is marked required: true, the only income-amount field in this document required outright (not gated behind an inferred boolean), because Form 1770 S's own eligibility screening (see "What was confirmed directly" above) scopes it to filers who selected "Tidak" to "Apakah Anda Menjalankan Usaha atau Pekerjaan bebas?" — i.e., salaried employees by construction — for whom this line is always populated in the worked example, cross-referenced against the filer's own Formulir 1721-A1 certificate.
  7. assetDescription's own optionality within its bounded group is unclear from the source screenshots (see field description) — modelled with the same requiredWhen as its sibling fields for consistency rather than guessed at independently.
  8. Login credentials, the eligibility-screening questions, the entry-mode choice, and all submission/session mechanics (verification- code exchange, satisfaction survey, receipt) are excluded, per this registry's standing convention against modelling account credentials or ephemeral session data as durable application fields (see "What was confirmed directly" above for the full list).

Mock conformance run

conformance/id/djp/annual-individual-income-tax-return-1770s/1.0.0/ contains one mock filing packet, checked independently against this document's own requiredWhen conditions:

  • application-packet.json — an unmarried, no-dependents salaried filer with a populated Lampiran II Bagian A/B/C/D entry, one Lampiran I Bagian A/B amount each, one Bukti Potong entry cross-referencing the guide's own worked Formulir 1721-A1 example, and an agreed declaration — exercises all six requiredWhen branches (hasFinalIncome, hasAssetsAtYearEnd, hasDebtsAtYearEnd, hasFamilyMembersListed, hasWithholdingCertificate, sptStatus=pembetulanamendmentNumber) at least once each.

Path to a verified claim (next step)

  1. Independently re-fetch the same PDF and re-render/re-read each cited page, confirming every field sourceRef against the actual screenshot.
  2. Confirm DJP has not since published a newer edition of this guide, and that pajak.go.id's own e-Filing help/tutorial index still references it.
  3. Obtain access to the live djponline.pajak.go.id e-Filing wizard (requires a real Indonesian NPWP/NIK and password) to: confirm or replace the six open-string dropdown fields with real enum option lists (judgment call 1); confirm the full PTKP status-code list (judgment call 2); confirm assetDescription's true optionality (judgment call 7); and capture a populated worked example for the family/dependents table (judgment call 4).
  4. Per this registry's structural-reference maturity convention, advancing maturity.criteria.verifiedSchema/agentReadySchema beyond a second reviewer's field-by-field pass requires live-wizard execution testing, not just source re-verification.

Re-verification

Per the practice's Cadence, nextReviewBy is set to 2027-01-07 (~6 months). Re-check the source, and confirm no newer guide revision has been published, on or before that date and on any source.url change.

View the raw record (VERIFICATION.md)

Version history

  • 1.0.0 draft latest this page has verification record schema.json

Independent and non-affiliated

GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by Direktorat Jenderal Pajak (Directorate General of Taxes) or any government. The authoritative source is always the live government form and its official instructions.