{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "md/asp/cerere-admitere-examen-preschimbare-restabilire-permis-conducere",
  "version": "1.0.0",
  "title": "Moldova Driving-License Exam Admission / Exchange / Restoration / Provisional-Issuance Request (Cerere de admitere la examen, preschimbare, restabilire a permisului de conducere)",
  "description": "The Agenția Servicii Publice's (ASP, Public Services Agency) standard 'CERERE' (Request) form, published as Anexa nr. 5 to the Instrucțiunile cu privire la organizarea și prestarea serviciilor de examinare și documentare cu permis de conducere (Instructions on the organization and provision of driving-license examination and documentation services), approved by ASP Order no. 104 of 2022-12-09. A single applicant selects exactly one of four request types printed as checkboxes: admission to a stage of the driving exam for a given vehicle sub/category (on a basis such as a completed driving-school qualification, a foreign-license exchange, or restoration of a canceled/suspended permit); exchange (preschimbare) of an existing driving license; restoration (restabilire) of an existing driving license; or issuance of a provisional driving license (permis de conducere provizoriu). Each of the first three request types carries its own conditional sub-fields (requestType-gated via requiredWhen), which this document models as distinct field sets rather than a single shared set, since the printed blanks differ per option (e.g. only the exam-admission option asks for a vehicle sub/category and admission basis; only the exchange/restoration options ask for the existing license's own series/number/issue date/issuing authority/reason). The form's own civil-liability acknowledgment ('Cu prevederile art.1998 ... Codul civil ... reparaea prejudiciului patrimonial în cazul unor acțiuni ce vor conduce la deteriorarea vehiculelor de examinare și altor bunuri', printed directly beneath the exam-admission checkbox and referencing damage specifically to examination vehicles) is modeled as an exam-admission-only acknowledgment date, a disclosed judgment call — see VERIFICATION.md. The pre-title 'Șefului ___ (subdiviziunea, numele, prenumele)' addressing line is modeled as an optional field, since it is plausible either the applicant or the receiving ASP subdivision itself completes this line. The closing 'Cererea și actele au fost recepționate de: ___ (N.P. funcția și semnătura angajatului)' line (the receiving ASP employee's own name/position/signature) is out of scope, being agency back-office data completed by ASP personnel rather than the applicant. Physical wet-ink signatures are excluded per this registry's standing convention, though their adjoining dates are modeled. GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Government of the Republic of Moldova or Agenția Servicii Publice.",
  "status": "draft",
  "jurisdiction": {
    "country": "MD",
    "level": "national"
  },
  "authority": {
    "name": "Agenția Servicii Publice",
    "abbreviation": "ASP",
    "url": "https://www.asp.gov.md"
  },
  "process": {
    "type": "request",
    "language": "ro-MD"
  },
  "source": {
    "url": "https://www.asp.gov.md/sites/default/files/servicii/e-servicii/formulare-tip/3-4/3_cerere_de_admitere_la_examen_preschimbare_restabilire_permis_de_conducere_2.pdf",
    "retrievedAt": "2026-07-15",
    "documentRef": "Cerere de admitere la examen / preschimbare / restabilire a permisului de conducere — Anexa nr. 5 la Instrucțiunile cu privire la organizarea și prestarea serviciilor de examinare și documentare cu permis de conducere, aprobate prin Ordinul Agenției Servicii Publice nr. 104 din 09.12.2022, formular 3-4/3, Agenția Servicii Publice"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-15",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-15",
    "notes": "GOV-3179, a disclosed backlog candidate from GOV-3157 (the Moldova DMV vertical opener, md/asp/vehicle-registration), itself delegated from the GOV-3152 'GovSchema Standard Research' cycle. Re-verified fresh this cycle rather than trusted from the prior scouting note: fresh curl fetch, HTTP 200, content-type application/pdf, 56,576 bytes, sha256 a099c40f302c0932c97b5caa4818599a925f820f4625ff070eeaecd92f6d8ff7, genuine %PDF-1.5 header (confirmed via od -c on the first 8 bytes), fetched directly from asp.gov.md with no login/CAPTCHA/WAF gate encountered. Like the sibling md/asp/vehicle-registration (and unlike md/asp/cerere-inregistrare-intreprinzator-individual), this single-page document is a genuine scanned/rasterized form: pdfjs-dist@3.11.174's getTextContent() on the sole page returned zero text items and getAnnotations() returned zero widgets (no AcroForm) — confirmed programmatically, not assumed from a prior note. The entire field list was read from a pdfjs-dist + node-canvas render at 4x scale (2382x3370px full-page PNG), cropped section-by-section to resolve every field label, checkbox group, and box grid at higher effective resolution; the full-page render and every crop referenced are the actual basis for the field list. This document models a single-page form offering four mutually-exclusive, checkbox-selected request types (exam admission, license exchange, license restoration, provisional-license issuance) as an enum requestType field with requiredWhen-gated conditional sub-fields per option, following the same conditional-field pattern established elsewhere in this registry (e.g. mx/semovi/alta-vehiculo-foraneo's ownerPersonType-gated fields). No printed asterisk/bold/'obligatoriu' convention anywhere distinguishes required from optional fields; requiredness is a disclosed judgment call based on which data each request type structurally cannot proceed without. The DNP 13-digit box grid ('DNP |_|_|...|_|', 13 cells counted directly from a zoomed crop) is modeled as personalIdNumber with the same 13-digit IDNP pattern established in the sibling md/asp schemas, on the working assumption that 'DNP' here is the same numărul de identificare de stat al persoanei fizice concept as the 'Codul personal (I.D.N.P.)' label used verbatim by the sibling vehicle-registration form — the abbreviation itself differs (DNP vs I.D.N.P.) but the field's structural position (13-cell box grid, directly following the applicant's identity-document details, immediately before 'solicit:') and cell count match exactly, and no alternative 13-digit personal-identifier concept is otherwise documented for Moldova; disclosed as a judgment call rather than asserted with certainty. The pre-title 'Șefului ___ (subdiviziunea, numele, prenumele)' addressing line is modeled as an optional field (submittedToOffice) rather than excluded outright, since — unlike the vehicle-registration sibling's excluded 'ELIBERAT p/t'/'n/î' post-processing header, which reads as an office-only tracking stub — this line plausibly could be completed by either the applicant (naming the specific ASP subdivision/office they are filing to) or the receiving office itself; disclosed as an interpretive judgment call. The civil-liability acknowledgment 'Data ___ / Semnătura ___' pair, printed directly beneath the exam-admission checkbox and its own liability declaration (which explicitly references damage to 'vehiculelor de examinare', examination vehicles), is modeled as requestType == exam-admission-gated (examLiabilityAcknowledgmentDate) rather than always-required, since the declaration's own subject matter (use of ASP's examination vehicles during a driving test) only functionally applies to that request type; disclosed as a judgment call rather than asserted with certainty, since the form does not print an explicit 'applicable only if...' qualifier tying the two together. raionName (raionul) is modeled optional rather than required, since Moldova's two municipii (Chișinău, Bălți) are not subdivided into raioane, so a resident of either could structurally leave this blank while still fully completing the domicile address. Vehicle sub/category (examVehicleSubcategory), the exam stage (examStage, 'proba'), and the admission basis (examAdmissionBasis, 'în baza ...') are each modeled as free text since the source form prints no fixed picklist for any of them. The closing 'Cererea și actele au fost recepționate de: ___' line (the receiving ASP employee's own name/position/signature) is excluded as agency back-office data, consistent with this registry's established practice for staff/inspector sign-off lines (e.g. md/asp/vehicle-registration's excluded EXPERT/VERIFICAREA DI lines)."
  },
  "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-15"
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "submittedToOffice",
      "label": "Șefului",
      "type": "string",
      "required": false,
      "description": "Name of the ASP subdivision/office (and its head) this request is addressed to, as printed on the pre-title addressing line. Modeled optional since either the applicant or the receiving office may complete this line.",
      "sourceRef": "Șefului ___ (subdiviziunea, numele, prenumele)",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "applicantFullName",
      "label": "Subsemnatul(a)",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Full name (Numele, prenumele) of the requesting citizen.",
      "sourceRef": "Subsemnatul(a) ___ (Numele, prenumele)",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "dateOfBirth",
      "label": "născut(ă) la data de",
      "type": "date",
      "required": true,
      "classification": "pii",
      "sourceRef": "născut(ă) la data de ___"
    },
    {
      "name": "domicileLocality",
      "label": "domiciliat(ă) în localitatea",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "domiciliat(ă) în localitatea ___",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "domicileStreet",
      "label": "str.",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "str. ___",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "blockNumber",
      "label": "bl.",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Building/block number, when the applicant's address is a multi-block complex.",
      "sourceRef": "bl. ___",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "raionName",
      "label": "raionul",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "The applicant's raion (district). Modeled optional since Moldova's two municipii (Chișinău, Bălți) are not subdivided into raioane, so residents of either could leave this blank.",
      "sourceRef": "raionul ___",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "identityCardSeries",
      "label": "actul de identitate seria",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "actul de identitate seria ___",
      "validation": { "maxLength": 10 }
    },
    {
      "name": "identityCardNumber",
      "label": "actul de identitate nr.",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "actul de identitate seria ___ nr. ___",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "identityCardIssuedAt",
      "label": "eliberat la",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The office/location where the applicant's identity document was issued.",
      "sourceRef": "actul de identitate ... eliberat la ___",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "personalIdNumber",
      "label": "DNP",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "description": "The applicant's 13-digit national personal identification number, printed on the source as a 13-cell box grid labeled 'DNP'. Modeled with the same 13-digit IDNP pattern as the sibling md/asp schemas' 'Codul personal (I.D.N.P.)' field; disclosed as a judgment call on the abbreviation's meaning in VERIFICATION.md.",
      "sourceRef": "DNP |_|_|_|_|_|_|_|_|_|_|_|_|_|",
      "validation": { "pattern": "^[0-9]{13}$" }
    },
    {
      "name": "requestType",
      "label": "solicit",
      "type": "enum",
      "required": true,
      "description": "Which of the four mutually-exclusive request types the applicant is submitting, selected via one of four printed checkboxes.",
      "sourceRef": "solicit: ☐ admiterea la proba... / ☐ preschimbarea permisului... / ☐ restabilirea permisului... / ☐ eliberarea permisului de conducere provizoriu",
      "validation": {
        "enum": [
          "exam-admission",
          "license-exchange",
          "license-restoration",
          "provisional-license"
        ]
      }
    },
    {
      "name": "examStage",
      "label": "proba",
      "type": "string",
      "required": false,
      "description": "Which stage/portion of the driving exam (proba) admission is requested for (e.g. teoretică/theory, practică/practical). The source form prints no fixed picklist for this blank.",
      "sourceRef": "admiterea la proba ___ examenului",
      "requiredWhen": { "field": "requestType", "equals": "exam-admission" },
      "validation": { "maxLength": 50 }
    },
    {
      "name": "examVehicleSubcategory",
      "label": "sub/categoria",
      "type": "string",
      "required": false,
      "description": "The driving-license vehicle sub/category the applicant seeks exam admission for. The source form prints no fixed picklist for this blank.",
      "sourceRef": "pentru dreptul de a conduce vehicule din sub/categoria ___",
      "requiredWhen": { "field": "requestType", "equals": "exam-admission" },
      "validation": { "maxLength": 20 }
    },
    {
      "name": "examAdmissionBasis",
      "label": "în baza",
      "type": "string",
      "required": false,
      "description": "The applicant's own statement of the basis for exam admission, per the source's own footnote: the reason for admission, the series/number of an educational qualification document held and its issuing institution, a foreign-license exchange number, restoration of a canceled/suspended permit, etc.",
      "sourceRef": "în baza ___ (Motivul admiterii, seria, numărul actului de studii deținut și instituția emitentă, preschimbare permis străin nr., redobândire permis anulat/suspendat etc.)",
      "requiredWhen": { "field": "requestType", "equals": "exam-admission" },
      "validation": { "maxLength": 300 }
    },
    {
      "name": "examLiabilityAcknowledgmentDate",
      "label": "Data",
      "type": "date",
      "required": false,
      "description": "Date the applicant acknowledges the form's civil-liability declaration (Art. 1998 of the Civil Code, on damage to ASP's examination vehicles and other property during the exam), adjoining a wet-ink signature (excluded per this registry's standing convention on physical signatures). Modeled as gated on the exam-admission request type, since the declaration's own subject matter — use of examination vehicles — only functionally applies there; a disclosed judgment call, see VERIFICATION.md.",
      "sourceRef": "Data ___ Semnătura ___ (following the Art.1998 civil-liability declaration)",
      "requiredWhen": { "field": "requestType", "equals": "exam-admission" }
    },
    {
      "name": "exchangeLicenseSeries",
      "label": "preschimbarea permisului de conducere seria",
      "type": "string",
      "required": false,
      "sourceRef": "preschimbarea permisului de conducere seria ___",
      "requiredWhen": { "field": "requestType", "equals": "license-exchange" },
      "validation": { "maxLength": 10 }
    },
    {
      "name": "exchangeLicenseNumber",
      "label": "nr.",
      "type": "string",
      "required": false,
      "sourceRef": "preschimbarea permisului de conducere seria ___ nr. ___",
      "requiredWhen": { "field": "requestType", "equals": "license-exchange" },
      "validation": { "maxLength": 20 }
    },
    {
      "name": "exchangeLicenseIssueDate",
      "label": "din",
      "type": "date",
      "required": false,
      "description": "Issue date of the existing driving license being exchanged.",
      "sourceRef": "preschimbarea permisului de conducere seria ___ nr. ___ din ___",
      "requiredWhen": { "field": "requestType", "equals": "license-exchange" }
    },
    {
      "name": "exchangeCategories",
      "label": "categoriile/subcategoriile",
      "type": "string",
      "required": false,
      "description": "Categories/subcategories of the existing driving license being exchanged.",
      "sourceRef": "pentru categoriile/subcategoriile ___",
      "requiredWhen": { "field": "requestType", "equals": "license-exchange" },
      "validation": { "maxLength": 50 }
    },
    {
      "name": "exchangeIssuingAuthority",
      "label": "eliberat de (autoritatea emitentă)",
      "type": "string",
      "required": false,
      "description": "Authority that issued the existing driving license being exchanged.",
      "sourceRef": "eliberat de ___ (autoritatea emitentă)",
      "requiredWhen": { "field": "requestType", "equals": "license-exchange" },
      "validation": { "maxLength": 150 }
    },
    {
      "name": "exchangeReason",
      "label": "pe motiv de",
      "type": "string",
      "required": false,
      "description": "Reason for the license exchange, per the source's own footnote (e.g. deteriorare/damage, schimb de date/change of personal data, altele/other).",
      "sourceRef": "pe motiv de ___ (deteriorare, schimb de date, altele)",
      "requiredWhen": { "field": "requestType", "equals": "license-exchange" },
      "validation": { "maxLength": 150 }
    },
    {
      "name": "restorationLicenseSeries",
      "label": "restabilirea permisului de conducere seria",
      "type": "string",
      "required": false,
      "sourceRef": "restabilirea permisului de conducere seria ___",
      "requiredWhen": { "field": "requestType", "equals": "license-restoration" },
      "validation": { "maxLength": 10 }
    },
    {
      "name": "restorationLicenseNumber",
      "label": "nr.",
      "type": "string",
      "required": false,
      "sourceRef": "restabilirea permisului de conducere seria ___ nr. ___",
      "requiredWhen": { "field": "requestType", "equals": "license-restoration" },
      "validation": { "maxLength": 20 }
    },
    {
      "name": "restorationLicenseIssueDate",
      "label": "din",
      "type": "date",
      "required": false,
      "description": "Issue date of the existing driving license being restored.",
      "sourceRef": "restabilirea permisului de conducere seria ___ nr. ___ din ___",
      "requiredWhen": { "field": "requestType", "equals": "license-restoration" }
    },
    {
      "name": "restorationCategories",
      "label": "categoriile/subcategoriile",
      "type": "string",
      "required": false,
      "description": "Categories/subcategories of the existing driving license being restored.",
      "sourceRef": "pentru categoriile/subcategoriile ___",
      "requiredWhen": { "field": "requestType", "equals": "license-restoration" },
      "validation": { "maxLength": 50 }
    },
    {
      "name": "restorationIssuingAuthority",
      "label": "eliberat de (autoritatea emitentă)",
      "type": "string",
      "required": false,
      "description": "Authority that issued the existing driving license being restored.",
      "sourceRef": "eliberat de ___ (autoritatea emitentă)",
      "requiredWhen": { "field": "requestType", "equals": "license-restoration" },
      "validation": { "maxLength": 150 }
    },
    {
      "name": "restorationReason",
      "label": "pe motiv de",
      "type": "string",
      "required": false,
      "description": "Reason for the license restoration, per the source's own footnote (e.g. pierdere/loss, altele/other).",
      "sourceRef": "pe motiv de ___ (pierdere, altele)",
      "requiredWhen": { "field": "requestType", "equals": "license-restoration" },
      "validation": { "maxLength": 150 }
    },
    {
      "name": "applicationDate",
      "label": "Data",
      "type": "date",
      "required": true,
      "description": "Date the applicant signs the overall request, adjoining a wet-ink signature (excluded per this registry's standing convention on physical signatures). This is the form's final, always-applicable Date/Semnătura pair, following the tariff-payment and data-accuracy declarations, distinct from the exam-admission-only examLiabilityAcknowledgmentDate above.",
      "sourceRef": "Data ___ Semnătura ___ (final, following the tariff-payment/data-accuracy declarations)"
    }
  ]
}
