{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "my/jpj/driving-licence-application",
  "version": "1.0.0",
  "title": "Malaysia Driving Licence Application (Borang Permohonan Lesen Memandu, JPJ-L1)",
  "description": "The general-purpose application form (\"Borang Permohonan Lesen Memandu\", form JPJ-L1) that the Jabatan Pengangkutan Jalan Malaysia (JPJ, Malaysia's Road Transport Department) uses to process 21 distinct driving-licence transactions on a single form: a new learner's licence (Lesen Belajar Memandu), a new probationary licence (Lesen Percubaan) or driving licence (Lesen Memandu), adding a licence class, renewing, copying (duplicate), or converting a foreign/police/military licence, and applying for an International Driving Permit (Permit Memandu Antarabangsa, PMA). Excludes the separate vocational-licence forms (Goods Driving Licence/Public Service Vehicle licence) and any transaction requiring an in-person driving or written test, which this form does not itself administer. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Malaysia or the Jabatan Pengangkutan Jalan.",
  "status": "draft",
  "jurisdiction": {
    "country": "MY",
    "level": "national"
  },
  "authority": {
    "name": "Jabatan Pengangkutan Jalan Malaysia",
    "abbreviation": "JPJ",
    "url": "https://www.jpj.gov.my/"
  },
  "process": {
    "type": "application",
    "language": "ms"
  },
  "source": {
    "url": "https://www.jpj.gov.my/wp-content/uploads/2022/04/Borang-Permohonan-Lesen-Memandu-JPJ-L1.pdf",
    "retrievedAt": "2026-07-08",
    "documentRef": "JPJ-L1 — BORANG PERMOHONAN LESEN MEMANDU (Driving Licence Application Form), incl. p.2 PANDUAN MENGISI BORANG PERMOHONAN LESEN MEMANDU (filling instructions)"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-08",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-08",
    "notes": "GOV-1774: GovSchema Standard Research cycle. Opens Malaysia as GovSchema's 25th jurisdiction. Screened Switzerland's national D-visa and Schengen C-visa forms (both confirmed to be the EU/Schengen-harmonized templates already covered via France's Schengen-visa schema — duplicate risk, rejected) and Malaysia's SSM Companies Act s.14 'Superform' business-incorporation PDF (zero AcroForm fields and only a thin 2-page specimen printout, without the field-by-field numbered instructions this registry's guide-document fallback precedent requires — rejected as too thin). JPJ-L1 was picked instead: a genuine, unauthenticated, directly downloadable, currently-served PDF (last-modified 2022-04-22, confirmed live and unchanged) that, while carrying no AcroForm field layer (confirmed via pdfjs-dist: 0 widget annotations across its 2 pages), is itself a self-documenting field-by-field guide document — its own page 2 ('PANDUAN MENGISI BORANG PERMOHONAN LESEN MEMANDU') numbers and explains every field on page 1 by section and item number, the same guide-document pattern already used for AEAT Modelo 030/036, SII Formulario 22, and CEIDG-1. See VERIFICATION.md for the full candidate comparison and field-by-field sourcing."
  },
  "maturity": {
    "level": "structural-reference",
    "criteria": {
      "structuralReference": true,
      "verifiedSchema": false,
      "agentReadySchema": false,
      "executionTestedSchema": false
    },
    "method": "maturity-self-assessment-v1",
    "assertedBy": "GovSchema Engineering (Standards Engineer)",
    "assertedAt": "2026-07-08"
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "applicationType",
      "label": "Jenis Permohonan (application type)",
      "type": "enum",
      "required": true,
      "description": "The single transaction type this application concerns, selected from the form's own 21-code legend (Bahagian A): 06=new learner's licence, 15=probationary-licence conversion, 24=add class to learner's licence, 00=new driving licence, 38=copy of learner's licence, 04=International Driving Permit (PMA), 53=add class & renew learner's licence, 05=convert licence (foreign/police/military), 54=copy & renew learner's licence, 20=add class to driving licence, 55=add class & copy learner's licence, 30=copy of driving licence, 56=add class & copy & renew learner's licence, 50=add class & renew driving licence, 10=new probationary licence, 60=copy & renew driving licence, 11=add class to probationary licence, 64=add class & copy driving licence, 12=copy of probationary licence, 67=add class & copy & renew driving licence, 14=add class & copy probationary licence.",
      "sourceRef": "JPJ-L1 p.1, 'A. JENIS PERMOHONAN'; p.2 PANDUAN, 'BAHAGIAN A. JENIS PERMOHONAN Gunakan kod berikut (Pilih satu sahaja)' (21-code legend)",
      "validation": {
        "enum": [
          "new_learner_license", "probationary_license_conversion", "learner_license_add_class",
          "new_driving_license", "learner_license_copy", "international_driving_permit",
          "learner_license_add_class_and_renew", "license_conversion", "learner_license_copy_and_renew",
          "driving_license_add_class", "learner_license_add_class_and_copy", "driving_license_copy",
          "learner_license_add_class_copy_and_renew", "driving_license_add_class_and_renew",
          "new_probationary_license", "driving_license_copy_and_renew", "probationary_license_add_class",
          "driving_license_add_class_and_copy", "probationary_license_copy",
          "driving_license_add_class_copy_and_renew", "probationary_license_add_class_and_copy"
        ]
      }
    },
    {
      "name": "applicantIdNumber",
      "label": "No. KP / Pasport / Polis / Tentera",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "description": "The applicant's identification number: MyKad (national identity card) number for Malaysian civilians, passport number for non-citizens, or the applicant's police or armed-forces service number if serving in either force.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 1 'No. KP / Pasport / Polis / Tentera'; p.2 PANDUAN item 1: \"Jika anda sedang berkhidmat dalam pasukan polis atau tentera, isikan nombor polis/tentera... Jika anda bukan rakyat Malaysia, isikan nombor pasport. Jika anda orang awam, isikan nombor kad pengenalan.\""
    },
    {
      "name": "applicantCategory",
      "label": "Kategori (applicant category)",
      "type": "enum",
      "required": true,
      "description": "The applicant's category, per the form's own code legend: 0=Malaysian permanent resident, 1=Malaysian civilian, 2=police member, 3=armed-forces member, 7=holder of a Malaysian birth certificate (no MyKad, typically a minor), 8=holder of a Malaysian identification receipt, 9=non-Malaysian citizen.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 2 'Kategori'; p.2 PANDUAN item 2: \"Gunakan kod seperti berikut: 0 - Penduduk Tetap Malaysia 1 - Orang Awam Malaysia 2 - Anggota Polis 3 - Anggota Tentera 7 - Sijil Kelahiran Malaysia 8 - Resit Pengenalan Malaysia 9 - Bukan Warganegara Malaysia\"",
      "validation": {
        "enum": ["0", "1", "2", "3", "7", "8", "9"]
      }
    },
    {
      "name": "fullName",
      "label": "Nama",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The applicant's full name, as it appears on their MyKad or passport.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 3 'Nama'; p.2 PANDUAN item 3: \"Isikan nama anda seperti didalam kad pengenalan atau pasport.\""
    },
    {
      "name": "address",
      "label": "Alamat",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The applicant's current home address.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 4 'Alamat'; p.2 PANDUAN item 4: \"Isikan alamat rumah anda sekarang.\""
    },
    {
      "name": "postcode",
      "label": "Poskod",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The postcode of the applicant's current residential area.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 5 'Poskod'; p.2 PANDUAN item 5: \"Isikan poskod kawasan anda menetap sekarang.\""
    },
    {
      "name": "city",
      "label": "Bandar",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The city or town of the applicant's current residence.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 6 'Bandar'; p.2 PANDUAN item 6: \"Isikan bandar tempat anda menetap sekarang.\""
    },
    {
      "name": "state",
      "label": "Negeri",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The Malaysian state (or federal territory) of the applicant's current residence. The source guide gives no enumerated state list for this item, only a free-text instruction, so this schema does not fabricate one.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 7 'Negeri'; p.2 PANDUAN item 7: \"Isikan negeri anda menetap sekarang.\""
    },
    {
      "name": "gender",
      "label": "Jantina (L / P)",
      "type": "enum",
      "required": true,
      "description": "The applicant's gender: L (Lelaki, male) or P (Perempuan, female) — the form's own two-option code.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 8 'Jantina (L / P)'; p.2 PANDUAN item 8: \"Isikan L - Lelaki, P - Perempuan.\"",
      "validation": {
        "enum": ["L", "P"]
      }
    },
    {
      "name": "placeOfBirth",
      "label": "Tempat Lahir (untuk PMA sahaja)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "requiredWhen": {
        "field": "applicationType",
        "equals": "international_driving_permit"
      },
      "description": "The applicant's city/town of birth. Per the form's own label, only collected for an International Driving Permit (PMA) application.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 9 'Tempat Lahir (untuk PMA sahaja)'; p.2 PANDUAN item 9: \"Isikan bandar tempat kelahiran anda.\""
    },
    {
      "name": "dateOfBirth",
      "label": "Tarikh Lahir",
      "type": "date",
      "required": true,
      "classification": "pii",
      "description": "The applicant's date of birth.",
      "sourceRef": "JPJ-L1 p.1, 'B. BUTIR-BUTIR PEMOHON', item 10 'Tarikh Lahir'; p.2 PANDUAN item 10, worked example: \"Contohnya 13 hb Februari 1960\""
    },
    {
      "name": "licenseClassSought",
      "label": "Kelas (licence class)",
      "type": "string",
      "required": false,
      "description": "The driving-licence class this application concerns (e.g. B1, B, D). Per the form's own subheading, populated 'for a New Driving Licence application, or Add Class only' (C.1). The form provides up to three repeatable class/date/serial rows (i, ii, iii); this schema models the single-class common case and leaves the multi-class case a disclosed scope limitation (see VERIFICATION.md).",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 1 'Untuk Permohonan Lesen Memandu Baru, atau Tambah Kelas sahaja — Kelas'; p.2 PANDUAN item C.1: \"Isikan kelas lesen yang anda telah lulus.\""
    },
    {
      "name": "licenseClassDatePassed",
      "label": "Tarikh Lulus (date passed)",
      "type": "date",
      "required": false,
      "description": "The date the driving test for the class named above was passed.",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 1 'Tarikh Lulus'; p.2 PANDUAN item C.1: \"Isikan tarikh lulus kelas lesen.\""
    },
    {
      "name": "licenseClassSerial",
      "label": "Siri DL 18 / JPJL 3 (test-pass certificate serial)",
      "type": "string",
      "required": false,
      "description": "The serial number of the DL18 or JPJL3 driving-test-pass certificate corresponding to the class named above.",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 1 'Siri DL 18 / JPJL 3'; p.2 PANDUAN item C.1: \"Isikan nombor siri JPJL3 bagi setiap kelas yang anda lulus.\""
    },
    {
      "name": "originalLicenseCountryCode",
      "label": "Kod Negara / Agensi yang mengeluarkan Lesen Asal",
      "type": "enum",
      "required": false,
      "requiredWhen": {
        "field": "applicationType",
        "in": ["license_conversion", "probationary_license_conversion"]
      },
      "description": "The 3-letter code for the country or agency that issued the applicant's original licence being converted: TEN (Malaysian Armed Forces), POL (Royal Malaysia Police), SIN (Singapore), KDT (diplomat/non-diplomat approved by Wisma Putra or JPJ HQ), or LLN (any other foreign country).",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 2 'Untuk Pertukaran Lesen sahaja — Kod Negara / Agensi yang mengeluarkan Lesen Asal'; p.2 PANDUAN item C.2: \"Isikan TEN jika lesen asal dikeluarkan oleh Angkatan Tentera Malaysia. Isikan POL jika lesen asal dikeluarkan oleh Polis Di Raja Malaysia. Isikan SIN jika lesen asal dikeluarkan oleh negara Singapura. Isikan KDT jika permohonan daripada Diplomat dan Bukan Diplomat yang diluluskan oleh Wisma Putra atau Ibu Pejabat JPJ. Isikan LLN jika lesen asal dikeluarkan oleh Negara asing (kecuali Singapura).\"",
      "validation": {
        "enum": ["TEN", "POL", "SIN", "KDT", "LLN"]
      }
    },
    {
      "name": "foreignCountryName",
      "label": "Jika negara asing, Nyatakan",
      "type": "string",
      "required": false,
      "requiredWhen": {
        "field": "originalLicenseCountryCode",
        "equals": "LLN"
      },
      "description": "The name of the foreign country that issued the original licence, when the country/agency code above is LLN.",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 2 'Jika negara asing, Nyatakan'; p.2 PANDUAN item C.2: \"Nyatakan nama negara jika lesen asal dikeluarkan oleh negara asing.\""
    },
    {
      "name": "existingLicenseSerialNumber",
      "label": "No. Siri Lesen",
      "type": "string",
      "required": false,
      "requiredWhen": {
        "field": "applicationType",
        "in": [
          "learner_license_copy", "learner_license_copy_and_renew", "learner_license_add_class_and_copy",
          "learner_license_add_class_copy_and_renew", "driving_license_copy", "driving_license_copy_and_renew",
          "driving_license_add_class_and_copy", "probationary_license_copy",
          "driving_license_add_class_copy_and_renew", "probationary_license_add_class_and_copy",
          "international_driving_permit"
        ]
      },
      "description": "The serial number of the applicant's existing Learner's Licence / Probationary Licence / Driving Licence. Per the form's own subheading, populated 'for a Copy application, or International Driving Permit only' (C.3).",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 3 'Untuk Permohonan Salinan atau Permit Memandu Antarabangsa sahaja — No. Siri Lesen'; p.2 PANDUAN item C.3: \"Isikan nombor siri Lesen Belajar Memandu/Lesen Percubaan/Lesen Memandu anda.\""
    },
    {
      "name": "existingLicenseClass",
      "label": "Kelas Lesen",
      "type": "string",
      "required": false,
      "description": "The class recorded on the applicant's existing licence named above (e.g. as printed on the Learner's/Probationary/Driving Licence).",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 3 'Kelas Lesen'; p.2 PANDUAN item C.3: \"Isikan Kelas Lesen seperti tercatat pada Lesen Belajar Memandu/Lesen Percubaan/Lesen Memandu anda.\""
    },
    {
      "name": "licenseExpiryDate",
      "label": "Tarikh Luput Lesen (jika berkenaan)",
      "type": "date",
      "required": false,
      "description": "The expiry date of the applicant's current learner's/probationary/driving licence, where applicable.",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 4 'Tarikh Luput Lesen (jika berkenaan)'; p.2 PANDUAN item C.4: \"Isikan tarikh luput lesen belajar / lesen percubaan / lesen memandu anda sekarang.\""
    },
    {
      "name": "applicationPeriod",
      "label": "Tempoh Permohonan (jika berkenaan)",
      "type": "string",
      "required": false,
      "description": "The requested validity period, where applicable: 1, 2, 3, 5, or 10 years for a Driving Licence, or '02' for a Probationary Licence (2-year validity).",
      "sourceRef": "JPJ-L1 p.1, 'C. BUTIR-BUTIR LESEN', item 5 'Tempoh Permohonan (jika berkenaan)'; p.2 PANDUAN item C.5: \"Isikan samada 1, 2, 3, 5 atau 10 tahun bagi Lesen Memandu dan 02 bagi Lesen Percubaan (Jika memohon 3 tahun, Isikan 03 dalam petak).\""
    },
    {
      "name": "courtConviction",
      "label": "Hukuman Mahkamah",
      "type": "boolean",
      "required": false,
      "visibleWhen": {
        "field": "applicationType",
        "in": ["new_learner_license", "new_driving_license", "license_conversion"]
      },
      "description": "Whether the applicant has a court conviction (Hukuman Mahkamah) relevant to the declaration in Bahagian D. Per the form's own subheading, this declaration section applies only to a New Learner's Licence, New Driving Licence, or Licence Conversion application.",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN (Untuk Permohonan Lesen Belajar Memandu Baru, Lesen Memandu Baru atau Tukar Lesen Sahaja)', code 'A — Hukuman Mahkamah'"
    },
    {
      "name": "epilepsy",
      "label": "Penyakit Gila Babi",
      "type": "boolean",
      "required": false,
      "visibleWhen": {
        "field": "applicationType",
        "in": ["new_learner_license", "new_driving_license", "license_conversion"]
      },
      "description": "Whether the applicant has epilepsy (Penyakit Gila Babi).",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', code 'B — Penyakit Gila Babi'"
    },
    {
      "name": "physicalDisability",
      "label": "Cacat anggota",
      "type": "boolean",
      "required": false,
      "visibleWhen": {
        "field": "applicationType",
        "in": ["new_learner_license", "new_driving_license", "license_conversion"]
      },
      "description": "Whether the applicant has a physical disability (Cacat anggota).",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', code 'C — Cacat anggota'"
    },
    {
      "name": "faintingOrBlackout",
      "label": "Pitam dan Pengsan",
      "type": "boolean",
      "required": false,
      "visibleWhen": {
        "field": "applicationType",
        "in": ["new_learner_license", "new_driving_license", "license_conversion"]
      },
      "description": "Whether the applicant experiences fainting or blackouts (Pitam dan Pengsan).",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', code 'D — Pitam dan Pengsan'"
    },
    {
      "name": "poorEyesight",
      "label": "Kesukaran membaca sejauh 23m",
      "type": "boolean",
      "required": false,
      "visibleWhen": {
        "field": "applicationType",
        "in": ["new_learner_license", "new_driving_license", "license_conversion"]
      },
      "description": "Whether the applicant has difficulty reading a number plate at 23 metres in clear daylight (Kesukaran membaca sejauh 23m pada masa cuaca terang) — Malaysia's standard driving-eyesight test distance.",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', code 'E — Kesukaran membaca sejauh 23m pada masa cuaca terang'"
    },
    {
      "name": "otherDisease",
      "label": "Penyakit Lain",
      "type": "boolean",
      "required": false,
      "visibleWhen": {
        "field": "applicationType",
        "in": ["new_learner_license", "new_driving_license", "license_conversion"]
      },
      "description": "Whether the applicant has another disease or condition not covered by the five named categories above (Penyakit Lain, Nyatakan).",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', code 'F — Penyakit Lain, Nyatakan'"
    },
    {
      "name": "otherDiseaseDetail",
      "label": "Penyakit Lain — Nyatakan (specify)",
      "type": "string",
      "required": false,
      "classification": "health",
      "requiredWhen": {
        "field": "otherDisease",
        "equals": true
      },
      "description": "Free-text description of the other disease or condition, required whenever 'Penyakit Lain' is marked.",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', code 'F — Penyakit Lain, Nyatakan ……………………………………'"
    },
    {
      "name": "vehicleRegistrationNumber",
      "label": "No. Pendaftaran Kenderaan (Untuk cacat anggota sahaja)",
      "type": "string",
      "required": false,
      "requiredWhen": {
        "field": "physicalDisability",
        "equals": true
      },
      "description": "The registration number of the vehicle the applicant drives, required only when 'Cacat anggota' (physical disability) is marked.",
      "sourceRef": "JPJ-L1 p.1, 'D. PENGAKUAN', 'No. Pendaftaran Kenderaan (Untuk cacat anggota sahaja)'"
    },
    {
      "name": "declarationDate",
      "label": "Tarikh",
      "type": "date",
      "required": true,
      "description": "The date the applicant signs the declaration below Bahagian D, attesting that all information given in the form is true.",
      "sourceRef": "JPJ-L1 p.1, footer: \"Saya mengaku bahawa segala maklumat yang diberikan di atas adalah benar. Tarikh …………………………………..\""
    }
  ],
  "documents": [
    {
      "id": "identificationDocument",
      "label": "Original MyKad or passport (or a copy, if submitted by a representative)",
      "category": "supporting-evidence",
      "required": true,
      "sourceRef": "JPJ 'Learn to Drive License Application (LDL)' service page (https://www.jpj.gov.my/en/learn-to-drive-license-application-ldl/), 'Required documents: The original MyKad / Passport or a copy of the applicant's MyKad / Passport if the transaction is done by a representative'"
    },
    {
      "id": "photograph",
      "label": "1 colour passport-style photograph of the applicant",
      "category": "supporting-evidence",
      "required": true,
      "sourceRef": "JPJ-L1 p.2 PANDUAN, note (iii): \"Sertakan 1 keping gambar pemohon\"; JPJ 'Learn to Drive License Application (LDL)' service page (https://www.jpj.gov.my/en/learn-to-drive-license-application-ldl/): \"1 color photo (with black background) measuring 25mm x 32mm\""
    },
    {
      "id": "statePaymentFee",
      "label": "State fee for the requested transaction",
      "category": "payment",
      "required": true,
      "amount": {
        "currency": "MYR",
        "value": 20
      },
      "sourceRef": "JPJ 'Driving License Transaction Fee Rate' page (https://www.jpj.gov.my/en/jpj-service-information/driving-license-transaction-fee-rate/): New Learner's Licence (LDL) Class B/C, citizen rate, RM20.00 for 3 months / RM40.00 for 6 months — the fee for the most common single transaction this form covers. Fees vary substantially by transaction type, licence class, validity period, and citizenship (e.g. RM150 for an International Driving Permit per the same page, RM20 flat for a licence copy); the full official rate table is disclosed in VERIFICATION.md rather than modelled as a single universal amount."
    },
    {
      "id": "signedDeclaration",
      "label": "Applicant's declaration and signature",
      "category": "attestation",
      "required": true,
      "statement": "Saya mengaku bahawa segala maklumat yang diberikan di atas adalah benar.",
      "issuingAuthority": "Self-attested by the applicant, signed within the form's marked 'Tandatangan Pemohon' box",
      "sourceRef": "JPJ-L1 p.1, declaration text above the 'Tandatangan Pemohon' box"
    }
  ],
  "steps": [
    {
      "id": "jenis_permohonan",
      "title": "A - Jenis Permohonan (application type)",
      "fields": ["applicationType"],
      "next": "butir_pemohon"
    },
    {
      "id": "butir_pemohon",
      "title": "B - Butir-butir Pemohon (applicant details)",
      "fields": ["applicantIdNumber", "applicantCategory", "fullName", "address", "postcode", "city", "state", "gender", "placeOfBirth", "dateOfBirth"],
      "next": "butir_lesen"
    },
    {
      "id": "butir_lesen",
      "title": "C - Butir-butir Lesen (licence details)",
      "fields": ["licenseClassSought", "licenseClassDatePassed", "licenseClassSerial", "originalLicenseCountryCode", "foreignCountryName", "existingLicenseSerialNumber", "existingLicenseClass", "licenseExpiryDate", "applicationPeriod"],
      "next": "pengakuan"
    },
    {
      "id": "pengakuan",
      "title": "D - Pengakuan (declaration)",
      "fields": ["courtConviction", "epilepsy", "physicalDisability", "faintingOrBlackout", "poorEyesight", "otherDisease", "otherDiseaseDetail", "vehicleRegistrationNumber", "declarationDate"]
    }
  ]
}
