Registry entry

Serbia — Unified Registration Application (JRPPS), Sole Proprietor (Preduzetnik)

The Agency for Business Registers' (Agencija za privredne registre, APR) unified registration application "JRPPS" (Jedinstvena registraciona prijava osnivanja pravnih lica i drugih subjekata i registracije u Jedinstveni registar poreskih obveznika -- Unified Registration Application for the Establishment of Legal Entities and Other Subjects and Registration into the Unified Register of Tax Payers), sole-proprietor (preduzetnik) pathway, 2025 edition. Opens Serbia as the registry's 48th jurisdiction, via Business Formation. This unified application form is shared across many entity types (companies, associations, foundations, chambers of commerce, health/culture institutions, etc.); the sole-proprietor pathway is a distinct, separately-published PDF ("JRPPS_PR") that prints "PREDUZETNIK" as a running header on every content page and always registers in the Register of Business Entities (Registar privrednih subjekata). Confirmed genuinely AcroForm-fillable via pdfjs-dist: 10 pages, 197 distinct visible field names across 219 visible widgets (plus orphan/hidden master-field definitions with no page assignment, an artifact of the underlying shared multi-entity-type AcroForm template). The form's own structure runs: page 1, a cover page shared by all JRPPS entity types (register selection, application cover fields, decision-delivery-method choice, applicant/submitter identity and address, signature declaration); pages 2-9, ten Пословно име (business name) through ПДВ (VAT) sections specific to the predzetnik pathway; page 10, a supporting-documentation checklist. Two structural judgment calls are disclosed here and detailed in VERIFICATION.md: (1) page 1's Register selection (Radio Button1, 11 mutually-exclusive options -- Register of Business Entities, of foreign associations, of sports federations, of bankruptcy estates, of endowments/foundations, of chambers of commerce, of associations, of representative offices of foreign endowments/foundations and of foreign chambers of commerce, of health institutions, of culture institutions) is excluded from fields[] rather than modelled as an open enum, since the sole-proprietor pathway always registers in the Register of Business Entities -- the other 10 options apply to entity types wholly out of scope for this schema, so presenting them as a live choice would misrepresent this pathway's actual decision space; and (2) on page 3, the СЕДИШТЕ (seat) address's "*Број:" (house number) label spans two adjacent AcroForm text widgets (Text36.0, Text37.0) with no distinguishing sub-label, unlike every other "Број и слово" (number and letter) address block on this form, which cleanly uses two widgets under one combined two-concept label. The first widget is modelled as seatHouseNumber; the second is excluded as an unlabeled structural duplicate rather than inventing a meaning for it. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Serbia or the Agency for Business Registers.

Registry entry

rs/apr/jrpps-pr-sole-proprietor-registration

Jurisdiction
Serbia · national
Version
1.0.0
Verification
draft

Authoritative source APR, "Jedinstvena registraciona prijava osnivanja pravnih lica i drugih subjekata i registracije u Jedinstveni registar poreskih obveznika" (JRPPS), predzetnik (sole-proprietor) edition, 2025

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

160 fields, 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.

Fields

  • coverPageBusinessName string optional

    Free-text name entered on the cover page next to the barcode area assigned by APR. This unified cover page is shared across all JRPPS entity types; for the sole-proprietor pathway the business name is more precisely constructed from entrepreneurFullName + businessNameDesignation + registeredSeatPlace (and, optionally, businessFantasyName) in the ПОСЛОВНО ИМЕ section that follows -- this cover-page field appears to duplicate/summarize that construction for quick reference and name-reservation lookup, disclosed as a judgment call rather than silently merged with the later fields.

  • nameReservationConfirmationNumber string optional

    Confirmation number of a prior name reservation with APR. Entered only if a name reservation was made.

  • requestConfirmationOfSubmission boolean optional

    Whether the applicant is submitting the application directly at the Agency and requests that a confirmation of the submitted application be issued.

  • previousRejectedApplicationNumber string optional

    Number of a previously-rejected application, when this application is being resubmitted following a prior rejection.

  • decisionDeliveryMethod enum optional

    How the applicant requests the registrar's written decision be delivered. Per the form's own note, the decision's content can always be viewed on APR's website; a written dispatch is sent only on the applicant's explicit request via one of these five channels.

    enum: mail-to-applicant-address | mail-to-seat-address | in-person-apr-org-unit | mail-to-postal-receipt-address | in-person-apr-belgrade-hq
  • aprOrgUnitName string optional

    Name of the APR organizational unit at which the applicant will collect the decision in person.

  • applicantFirstName string optional

    First name of the person submitting the application (the applicant/submitter, who may be the sole proprietor or a proxy/representative).

    classification: pii
  • applicantLastName string optional

    Презиме

    classification: pii
  • applicantJmbgOrForeignerRecordNumber string optional

    Unique Master Citizen Number (JMBG) for a domestic applicant, or APR's own records number for a foreign applicant. Entering it lets the applicant look up the application's status on APR's website.

    classification: sensitive-pii
  • applicantForeignerPassportOrIdNumber string optional

    Foreign applicant's passport or ID card number.

    classification: sensitive-pii
  • applicantForeignerIssuingCountry string optional

    Country that issued the foreign applicant's passport or ID card.

  • applicantAddressMunicipality string optional

    Applicant's municipality in the Republic of Serbia. Used only if decisionDeliveryMethod is mail-to-applicant-address.

  • applicantAddressPlace string optional

    Место

  • applicantAddressStreet string optional

    Улица

  • applicantAddressHouseNumber string optional

    House/building number, printed under the combined "Број и слово" (Number and letter) label.

  • applicantAddressHouseLetter string optional

    House/building number letter suffix, printed under the combined "Број и слово" (Number and letter) label.

  • applicantAddressPostalCode string optional

    Број поште

  • applicantAddressPostOfficeName string optional

    Назив поште

  • applicantAddressFloor string optional

    Спрат

  • applicantAddressApartmentNumber string optional

    Број стана

  • applicantPhone string optional

    Contact phone number of the applicant/submitter (distinct from entrepreneurPhone1/entrepreneurPhone2 on page 4 and taxAuthorityPhoneFixed/taxAuthorityPhoneMobile on page 9).

  • applicantEmail string optional

    Contact email of the applicant/submitter (distinct from businessEmailAddress on page 3 and taxAuthorityEmail on page 9).

    pattern
  • entrepreneurFullName string required

    Personal name and surname of the sole proprietor, the first mandatory component of the business name (пословно име).

    classification: pii
  • businessNameDesignation enum required

    The designation appended to the business name: the full word "предузетник" or the abbreviation "пр". Mandatory second component of the business name; the source's two tick-boxes (*ПРЕДУЗЕТНИК: / *ПР:) are modelled as a single mutually-exclusive choice.

    enum: preduzetnik | pr
  • businessActivityDescription string optional

    Description of the principal business activity; may optionally be included as a component of the business name. Must point to the sole proprietor's predominant activity, and may also describe additional activities.

  • businessFantasyName string optional

    Optional fantasy/trade name component of the business name (пословно име), distinct from businessActivityDescription. Per the form's own note, it must differ from any already-registered sole proprietor with the same businessActivityDescription, may consist of letters, digits, or the characters "- . &", and if entered, businessActivityDescription must also be entered (the source's own cross-field rule; not machine-enforced here since JRPPS-PR has no field-absence operator to gate on non-empty optional string).

  • registeredSeatPlace string required

    Place (town/municipality) forming the third mandatory component of the business name. Restated in full address form (seatMunicipality/seatPlace/seatStreet/etc.) in the СЕДИШТЕ section on page 3 -- both are genuinely separate widgets on the source and are modelled as separate fields rather than silently merged.

  • abbreviatedBusinessNameFullName string optional

    Personal name and surname component of the abbreviated business name (скраћено пословно име), registered only if the sole proprietor has a businessFantasyName.

  • abbreviatedBusinessNameDesignation enum optional

    The designation used in the abbreviated business name: "предузетник" or "пр".

    enum: preduzetnik | pr
  • abbreviatedBusinessNameFantasyName string optional

    Fantasy/trade name component of the abbreviated business name; per the form's own note, may consist of an acronym of the words in businessFantasyName and/or businessActivityDescription.

  • businessNameTranslation1Type enum optional

    Whether this translation of the business name is into a foreign language or a national-minority language. Translations are entered only if they exist ({"уколико постоје"}); the name component itself (Назив) is never translated.

    enum: foreign-language | national-minority-language
  • businessNameTranslation1Language string optional

    Језик

  • businessNameTranslation1Text string optional

    Превод

  • businessNameTranslation2Type enum optional

    Whether this translation of the business name is into a foreign language or a national-minority language. Translations are entered only if they exist ({"уколико постоје"}); the name component itself (Назив) is never translated.

    enum: foreign-language | national-minority-language
  • businessNameTranslation2Language string optional

    Језик

  • businessNameTranslation2Text string optional

    Превод

  • abbreviatedBusinessNameTranslation1Type enum optional

    Whether this translation of the abbreviated business name is into a foreign language or a national-minority language. Translations are entered only if they exist ({"уколико постоје"}); the name component itself (Назив) is never translated.

    enum: foreign-language | national-minority-language
  • abbreviatedBusinessNameTranslation1Language string optional

    Језик

  • abbreviatedBusinessNameTranslation1Text string optional

    Превод

  • abbreviatedBusinessNameTranslation2Type enum optional

    Whether this translation of the abbreviated business name is into a foreign language or a national-minority language. Translations are entered only if they exist ({"уколико постоје"}); the name component itself (Назив) is never translated.

    enum: foreign-language | national-minority-language
  • abbreviatedBusinessNameTranslation2Language string optional

    Језик

  • abbreviatedBusinessNameTranslation2Text string optional

    Превод

  • seatMunicipality string required

    Municipality of the sole proprietor's seat (седиште) -- the place in the Republic of Serbia where the sole proprietor conducts its activity.

  • seatPlace string required

    Место (седиште)

  • seatStreet string required

    Улица (седиште)

  • seatHouseNumber string required

    Seat street/house number. The source AcroForm renders this as two adjacent boxes (Text36.0, Text37.0) under the single "*Број:" label with no distinguishing sub-label; modelled as one logical field per the form's own single "Број" label (contrast with the "Број и слово" combined-label fields elsewhere, which are modelled as two fields). The second box is disclosed in VERIFICATION.md as an unlabeled structural duplicate rather than silently invented a meaning for.

  • seatHouseLetter string optional

    Слово (седиште)

  • seatFloor string optional

    Спрат (седиште)

  • seatApartmentNumber string optional

    Број стана (седиште)

  • seatPostalCode string optional

    Број поште (седиште)

  • seatPostOfficeName string optional

    Назив поште (седиште)

  • seatAdditionalDescription string optional

    Additional description of the seat location, e.g. market name, stall number, or unit number, for premises not addressable by street number alone.

  • mailingAddressMunicipality string optional

    Municipality of the address for receiving mail, entered only if it exists and differs from the seat address. If not registered, the registrar's written decision cannot be requested for delivery to this address.

  • mailingAddressPlace string optional

    Место (адреса за пријем поште)

  • mailingAddressStreet string optional

    Улица (адреса за пријем поште)

  • mailingAddressHouseNumber string optional

    Број (адреса за пријем поште)

  • mailingAddressHouseLetter string optional

    Слово (адреса за пријем поште)

  • mailingAddressFloor string optional

    Спрат (адреса за пријем поште)

  • mailingAddressApartmentNumber string optional

    Број стана (адреса за пријем поште)

  • mailingAddressPostalCode string optional

    Број поште (адреса за пријем поште)

  • mailingAddressPostOfficeName string optional

    Назив поште (адреса за пријем поште)

  • mailingAddressAdditionalDescription string optional

    Додатни опис (адреса за пријем поште)

  • businessEmailAddress string required

    The sole proprietor's official e-mail address of record, a mandatory subject of registration (distinct from applicantEmail on page 1 and taxAuthorityEmail on page 9).

    pattern
  • isIndefiniteDuration boolean required

    Whether the sole proprietor is being registered for an indefinite term. If false, registeredUntilDate must be provided instead (the form's own either/or choice).

  • registeredUntilDate date optional

    Fixed-term registration end date, used only when isIndefiniteDuration is false.

  • businessActivityStartOption enum required

    Whether the start of business activity will be reported later (via a change-of-data application) or is being reported as of the day of entry into the registry (the decision date of the founding resolution). The source's two independent tick-boxes are modelled as a single mutually-exclusive choice per this registry's usual AcroForm quirk.

    enum: report-later | same-as-registration-date
  • predominantActivityCode string required

    Four-digit code of the predominant business activity, per Serbia's activity classification regulation (Уредба о класификацији делатности). Only the predominant activity is entered here; a special law may condition registration or performance of certain activities on a prior permit/consent (see the documents[] checklist).

    pattern
  • predominantActivityName string required

    Назив делатности (претежна делатност)

  • entrepreneurPhone1 string optional

    Sole proprietor's contact phone number. Contact details are not a mandatory subject of registration; if registered, they are published on APR's website.

  • entrepreneurPhone2 string optional

    Телефон 2

  • entrepreneurFax string optional

    Факс

  • entrepreneurWebsite string optional

    Интернет адреса

  • entrepreneurSex enum optional

    Sex of the sole proprietor, part of the personal data section feeding CROSO/tax administration registration.

    enum: male | femaleclassification: pii
  • entrepreneurFirstName string optional

    First name of the sole proprietor, split out (with entrepreneurLastName) from entrepreneurFullName for the personal-data/CROSO section.

    classification: pii
  • entrepreneurLastName string optional

    Презиме (лични подаци)

    classification: pii
  • entrepreneurJmbgOrForeignerRecordNumber string optional

    ЈМБГ / Евиденцијски број (предузетник)

    classification: sensitive-pii
  • entrepreneurForeignerPassportOrIdNumber string optional

    Број пасоша / личне карте странца (предузетник)

    classification: sensitive-pii
  • entrepreneurForeignerIssuingCountry string optional

    Држава издавања (предузетник)

  • socialInsuranceBasis enum optional

    The sole proprietor's basis for compulsory social insurance registration with CROSO (M-form): as an unemployed person (activity is the basic insurance basis), from an existing employment relationship (activity is supplementary), or as a pensioner. This data is explicitly NOT a subject of registration itself -- it is collected only to feed the CROSO and Tax Administration applications the Agency files alongside registration. The source's three independent tick-boxes are modelled as a single mutually-exclusive choice.

    enum: unemployed-basic-activity | employment-supplementary-activity | pensioner
  • qualificationLevel enum required

    The sole proprietor's education/qualification level code, per the form's own explicit instruction: "Обавезно уписати шифру стручне спреме предузетника" (Mandatory to enter the sole proprietor's qualification code) -- modelled as required despite the absence of a printed asterisk, since this instruction is unambiguous mandatory language. Like socialInsuranceBasis, this feeds CROSO's M-form and is not itself a subject of registration. The source's 14 independent tick-boxes are modelled as a single mutually-exclusive enum.

    enum: 14 values
  • individualProcuratorSex enum optional

    Пол (individual procurator)

    enum: male | femaleclassification: pii
  • individualProcuratorFirstName string optional

    Име (individual procurator)

    classification: pii
  • individualProcuratorLastName string optional

    Презиме (individual procurator)

    classification: pii
  • individualProcuratorJmbgOrForeignerRecordNumber string optional

    ЈМБГ / Евиденцијски број (individual procurator)

    classification: sensitive-pii
  • individualProcuratorForeignerPassportOrIdNumber string optional

    Број пасоша / личне карте странца (individual procurator)

    classification: sensitive-pii
  • individualProcuratorForeignerIssuingCountry string optional

    Држава издавања (individual procurator)

  • individualProcuratorCountersignatureRestriction boolean optional

    Whether the individual procurator's authorization is restricted such that it may only be exercised jointly with the sole proprietor's countersignature. Per the form's own note, procuration cannot otherwise be restricted except through the consent of other procurators (joint procuration).

  • jointProcurator1Sex enum optional

    Пол (joint procurator 1)

    enum: male | femaleclassification: pii
  • jointProcurator1FirstName string optional

    Име (joint procurator 1)

    classification: pii
  • jointProcurator1LastName string optional

    Презиме (joint procurator 1)

    classification: pii
  • jointProcurator1JmbgOrForeignerRecordNumber string optional

    ЈМБГ / Евиденцијски број (joint procurator 1)

    classification: sensitive-pii
  • jointProcurator1ForeignerPassportOrIdNumber string optional

    Број пасоша / личне карте странца (joint procurator 1)

    classification: sensitive-pii
  • jointProcurator1ForeignerIssuingCountry string optional

    Држава издавања (joint procurator 1)

  • jointProcurator2Sex enum optional

    Пол (joint procurator 2)

    enum: male | femaleclassification: pii
  • jointProcurator2FirstName string optional

    Име (joint procurator 2)

    classification: pii
  • jointProcurator2LastName string optional

    Презиме (joint procurator 2)

    classification: pii
  • jointProcurator2JmbgOrForeignerRecordNumber string optional

    ЈМБГ / Евиденцијски број (joint procurator 2)

    classification: sensitive-pii
  • jointProcurator2ForeignerPassportOrIdNumber string optional

    Број пасоша / личне карте странца (joint procurator 2)

    classification: sensitive-pii
  • jointProcurator2ForeignerIssuingCountry string optional

    Држава издавања (joint procurator 2)

  • jointProcurator3Sex enum optional

    Пол (joint procurator 3)

    enum: male | femaleclassification: pii
  • jointProcurator3FirstName string optional

    Име (joint procurator 3)

    classification: pii
  • jointProcurator3LastName string optional

    Презиме (joint procurator 3)

    classification: pii
  • jointProcurator3JmbgOrForeignerRecordNumber string optional

    ЈМБГ / Евиденцијски број (joint procurator 3)

    classification: sensitive-pii
  • jointProcurator3ForeignerPassportOrIdNumber string optional

    Број пасоша / личне карте странца (joint procurator 3)

    classification: sensitive-pii
  • jointProcurator3ForeignerIssuingCountry string optional

    Држава издавања (joint procurator 3)

  • branchLocation1ActivityCode string optional

    Activity code at separate operating location 1 of up to 3 printed on page 7; use as many copies of page 7 as needed for additional locations (per the form's own note).

    pattern
  • branchLocation1ActivityName string optional

    Назив делатности (издвојено место)

  • branchLocation1Municipality string optional

    Општина (издвојено место)

  • branchLocation1Place string optional

    Место (издвојено место)

  • branchLocation1Street string optional

    Улица (издвојено место)

  • branchLocation1HouseNumber string optional

    Број (издвојено место)

  • branchLocation1HouseLetter string optional

    Слово (издвојено место)

  • branchLocation1Floor string optional

    Спрат (издвојено место)

  • branchLocation1ApartmentNumber string optional

    Број стана (издвојено место)

  • branchLocation1PostalCode string optional

    Број поште (издвојено место)

  • branchLocation1PostOfficeName string optional

    Назив поште (издвојено место)

  • branchLocation1AdditionalDescription string optional

    E.g. market name, stall number, or unit number.

  • branchLocation2ActivityCode string optional

    Activity code at separate operating location 2 of up to 3 printed on page 7; use as many copies of page 7 as needed for additional locations (per the form's own note).

    pattern
  • branchLocation2ActivityName string optional

    Назив делатности (издвојено место)

  • branchLocation2Municipality string optional

    Општина (издвојено место)

  • branchLocation2Place string optional

    Место (издвојено место)

  • branchLocation2Street string optional

    Улица (издвојено место)

  • branchLocation2HouseNumber string optional

    Број (издвојено место)

  • branchLocation2HouseLetter string optional

    Слово (издвојено место)

  • branchLocation2Floor string optional

    Спрат (издвојено место)

  • branchLocation2ApartmentNumber string optional

    Број стана (издвојено место)

  • branchLocation2PostalCode string optional

    Број поште (издвојено место)

  • branchLocation2PostOfficeName string optional

    Назив поште (издвојено место)

  • branchLocation2AdditionalDescription string optional

    E.g. market name, stall number, or unit number.

  • branchLocation3ActivityCode string optional

    Activity code at separate operating location 3 of up to 3 printed on page 7; use as many copies of page 7 as needed for additional locations (per the form's own note).

    pattern
  • branchLocation3ActivityName string optional

    Назив делатности (издвојено место)

  • branchLocation3Municipality string optional

    Општина (издвојено место)

  • branchLocation3Place string optional

    Место (издвојено место)

  • branchLocation3Street string optional

    Улица (издвојено место)

  • branchLocation3HouseNumber string optional

    Број (издвојено место)

  • branchLocation3HouseLetter string optional

    Слово (издвојено место)

  • branchLocation3Floor string optional

    Спрат (издвојено место)

  • branchLocation3ApartmentNumber string optional

    Број стана (издвојено место)

  • branchLocation3PostalCode string optional

    Број поште (издвојено место)

  • branchLocation3PostOfficeName string optional

    Назив поште (издвојено место)

  • branchLocation3AdditionalDescription string optional

    E.g. market name, stall number, or unit number.

  • remarkCategory enum optional

    Category of an optional register annotation (забележба): fixed working hours of a private practice, or a free-text "other" category (requiring remarkOtherCategorySpecify).

    enum: private-practice-hours | other
  • remarkOtherCategorySpecify string optional

    Free-text specification of the remark category, used only when remarkCategory is "other".

  • remarkTextProvided boolean optional

    Toggle indicating that the text of the register annotation is provided in remarkText.

  • remarkText string optional

    Free-text content of the register annotation.

  • taxAuthorityPhoneFixed string optional

    Fixed-line phone number for Tax Administration contact purposes. Per the form's own note, at least one of taxAuthorityPhoneFixed/taxAuthorityPhoneMobile is mandatory; not machine-enforced here since the Condition grammar has no clean "at least one of two optional fields" construct.

  • taxAuthorityPhoneMobile string optional

    Mobile phone number for Tax Administration contact purposes. See taxAuthorityPhoneFixed for the at-least-one-of rule.

  • taxAuthorityEmail string required

    E-mail address for Tax Administration contact purposes, an explicitly mandatory data point used by the Tax Administration to verify reachability of newly-founded taxpayers (distinct from applicantEmail on page 1 and businessEmailAddress on page 3, though likely the same address in practice).

    pattern
  • lumpSumTaxationRequested boolean optional

    Request that tax on income from independent activity be paid on a lump-sum-determined income (паушално утврђен приход), on the basis that the sole proprietor is unable to keep business books (or keeping them would substantially impede the activity), except for the register-of-turnover book. Mutually exclusive with personalSalaryPayoutElection per the form's own note (electing one forfeits eligibility for the other).

  • personalSalaryPayoutElection boolean optional

    Election, by a sole proprietor who keeps business books, to pay out a personal salary. Mutually exclusive with lumpSumTaxationRequested per the form's own note.

  • vatRegistrationRequested boolean optional

    Whether the applicant is also submitting an application for registration as a value-added-tax payer.

  • vatEstimatedTurnover12Months number optional

    Estimated total turnover, in dinars without decimals, over the next 12 months. Per the form's own note, must be at least 8,000,001.00 dinars.

    range: 8000001–∞
  • vatPrimaryActivityCode string optional

    Шифра претежне делатности (ПДВ)

  • vatPrimaryActivityPercentage number optional

    Проценат обављања претежне делатности (ПДВ)

    range: 0–100
  • vatAdditionalActivity1Code string optional

    Шифра додатне делатности 1 (ПДВ)

  • vatAdditionalActivity1Percentage number optional

    Проценат обављања додатне делатности 1 (ПДВ)

    range: 0–100
  • vatAdditionalActivity2Code string optional

    Шифра додатне делатности 2 (ПДВ)

  • vatAdditionalActivity2Percentage number optional

    Проценат обављања додатне делатности 2 (ПДВ)

    range: 0–100
  • activityPermitReferenceNumberAndDate string optional

    Reference number and issue date of the permit/consent/act named in the activityPermitOrLicense document, entered instead of attaching a copy when a publicly-accessible official record of issued permits already exists.

  • otherDocumentDescription string optional

    Free-text description of the document attached under the otherSupportingDocument checklist entry.

Verification record

This file is the source-review record for this document version, per the manual-source-review-v1 practice.

Current claim

  • status: draft
  • verification.method: manual-source-review-v1
  • verification.lastVerifiedAt: 2026-07-13
  • maturity.level: structural-reference

This is GovSchema Standard Research cycle GOV-2725 (parent research cycle GOV-2723), authoring the child issue named in GOV-2716's own cycle: GOV-2716 scouted Serbia (via APR's JRPPS-PR sole-proprietor registration) to a strong, ready-to-author candidate and logged it in CATALOG.md's "Known Gaps & Opportunities" section rather than authoring it immediately. This schema opens Serbia as the registry's 48th jurisdiction, via Business Formation.

Duplicate-concurrent-run check

Checked gh pr list --state all --search "apr" and git branch -a | grep -i rs-apr before starting — neither found an existing rs/apr PR or branch beyond this run's own rs-apr-jrpps-pr-gov2725, so no reconciliation was needed this cycle.

Source verification — re-fetched from scratch, not trusted from the prior cycle

The task briefing flagged that apr.gov.rs is intermittently flaky and instructed a retry loop rather than trusting the prior cycle's numbers at face value. This cycle's own re-fetch found the live host fully down, not merely flaky:

  • A retry loop of the source PDF URL directly (https://apr.gov.rs/upload/Portals/0/preduzetnici/2025/JRPPS_PR___Osnivanje_2025_T.pdf) returned HTTP 500 on all 23 consecutive attempts (spread across two batches, with 3-5s backoff and a browser-like User-Agent), each time returning the same 39,174-byte generic IIS/ASP.NET error page (confirmed by inspecting the response body, which begins <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"...), not a truncated/corrupt PDF.
  • A direct fetch of the bare domain root (https://apr.gov.rs/) also returned HTTP 500, confirming this is a site-wide outage rather than a path-specific or transient glitch, and ruling out a simple retry-until-200 approach.
  • Fell back to the Wayback Machine as the task briefing's own retry-loop instruction did not anticipate a full site outage. The CDX API (web.archive.org/cdx/search/cdx?url=...&output=json) lists 8 snapshots between 2025-05-06 and 2025-09-18, all but one sharing the identical CDX content digest IXDQYCQOK7CEUNBQ7T37KMQQB4GEGREA.
    • Fetched the most recent snapshot (web.archive.org/web/20250918034911id_/http://www.apr.gov.rs/upload/Portals/0/preduzetnici/2025/JRPPS_PR___Osnivanje_2025_T.pdf) via both the id_ (raw, unmodified) and if_ (iframe-embeddable) Wayback replay modifiers: byte-identical, confirming the replay modifier does not alter PDF content (unlike HTML pages, which Wayback sometimes banner-injects).
    • Cross-checked against an independent, much-earlier snapshot (20250506092155, a different calendar month): also byte-identical to the 20250918 snapshot.
    • sha256: 0a7ebff903fa896a6b8c3d14f440d087aa7ec341cdb25cfe04b8b04bd0cc69ca, 412,964 bytes, valid %PDF-1.7 header. This is a different byte-size than the prior cycle's own scouting figure and than any single CDX length column value (which records WARC-record length, not object length, so is not directly comparable) — since three independent fetches (two Wayback replay modes, two snapshot dates) all agree byte-for-byte, this is treated as the authoritative current content, not a red flag.

PDF structure, confirmed via pdfjs-dist 3.11.174 (legacy build)

  • 10 pages, confirmed genuinely AcroForm-fillable: doc.getFieldObjects() returns 244 distinct field names (260 total field-object entries, since AcroForm radio-button groups share one field name across multiple per-value widgets). Of these, 197 distinct field names are actually anchored to a visible page (211 visible widget entries across pages 1-10); the remaining ~47 names are orphaned parent/master field definitions with no page assignment (page: -1), an artifact of the shared multi-entity-type JRPPS AcroForm template this PR-specific PDF was generated from (e.g. bare Text33, Text34, ... exist as unused parents alongside their real, page-anchored Text33.0/Text33.1 children).
  • Rendered all 10 pages to PNG via pdfjs-dist + node-canvas (2.5x scale) and visually cross-checked every widget's rect against the rendered page before modeling any field — not just correlating (x, y) text positions blindly. This caught two structural details that text-position correlation alone would have gotten wrong or missed:
    1. Page 1's register-selection group (Radio Button1, 11 mutually exclusive tick-boxes: Register of Business Entities, of foreign associations, of sports federations/societies, of bankruptcy estates, of endowments/foundations, of chambers of commerce, of associations, of representative offices of foreign endowments/foundations, of representative offices of foreign chambers of commerce, of health institutions, of culture institutions) is a real, single-choice AcroForm radio group (true PDF radio-button kids sharing one field name with distinct export values), not the "independently-named sibling widgets" checkbox-group quirk this registry has seen elsewhere. It is nonetheless excluded from fields[]: this specific PDF (filename JRPPS_PR) is the sole-proprietor-only edition of JRPPS, and a sole proprietor filing through it always registers in the Register of Business Entities — the other 10 options describe entity types wholly out of scope for this schema. Modeling it as an 11-value open enum would misrepresent this pathway's actual decision space (there is no real choice here for a preduzetnik filer).
    2. On page 3, the СЕДИШТЕ (seat) address's "*Број:" (house number) label spans two adjacent text widgets (Text36.0, Text37.0) with no distinguishing sub-label of its own — visually confirmed via an overlay render (widget rects drawn directly on the rendered page) that both widgets sit inside what appears as a single continuous input box. This is inconsistent with every other address block on this form (the applicant's page-1 address, the page-3 postal-receipt address, and each of the three page-7 branch-location addresses), all of which print a single combined "Број и слово:" (Number and letter) label over exactly two widgets, one per named concept. Modeled as: the first widget (Text36.0) → seatHouseNumber (matching the "Број:"-only label, one concept); the second widget (Text37.0) is excluded as an unlabeled structural duplicate rather than invented a "suffix" or "letter" meaning it has no printed support for — the seat's actual letter suffix is captured separately by the adjacent, clearly-labeled слово: widget (Text23), which does have its own field (seatHouseLetter).
  • Every other repeating checkbox/radio group on this form follows the registry's already-documented quirk (independently-named sibling widgets standing in for a single-choice concept) and is modeled by intent, not raw plumbing, per the task briefing's own instruction — e.g. businessNameDesignation (пословно име: "ПРЕДУЗЕТНИК" vs. "ПР"), businessActivityStartOption, socialInsuranceBasis, qualificationLevel (14 tick-boxes → one enum), and each translation block's foreign-language/national-minority-language pair.

Field-scoping judgment calls

  • Two overlapping "seat" fields, on different pages, both kept. registeredSeatPlace (page 2, part of the business-name construction: "Пословно име ... и место у ком је седиште предузетника") and seatMunicipality/seatPlace/seatStreet/etc. (page 3, the full СЕДИШТЕ address block) both capture the seat, but are genuinely separate AcroForm widgets appearing at different points in the source document. Both are modeled rather than silently merged, with the overlap disclosed on registeredSeatPlace's own description.
  • Three distinct e-mail fields, all kept. applicantEmail (page 1, optional, the submitter's own contact e-mail — the submitter may be a proxy, not the sole proprietor), businessEmailAddress (page 3, required, "Адреса за пријем електронске поште је обавезан предмет регистрације" — the business's official e-mail of record) and taxAuthorityEmail (page 9, required, collected specifically so the Tax Administration can verify reachability of newly-founded taxpayers) are three separate widgets on the source, likely the same address in practice but not guaranteed to be, and are modeled as three separate fields with cross-references disclosed in each one's own description.
  • coverPageBusinessName (page 1, "НАЗИВ:"). Ambiguous relative to the page-2 componentized business-name construction; disclosed as a judgment call on the field's own description rather than silently assumed equivalent or dropped. The adjacent "МЕСТО ЗА БАРКОД / додељује АПР" (barcode area, assigned by APR) is excluded as staff/system-populated.
  • qualificationLevel modeled required: true despite no printed asterisk. The form's own instructional text is unambiguous mandatory language — "Обавезно уписати шифру стручне спреме предузетника" (Mandatory to enter the sole proprietor's qualification code) — even though this section (like socialInsuranceBasis) is explicitly stated to not itself be a subject of registration, only data collected to feed the CROSO M-form and Tax Administration applications APR files alongside registration. This is the one field in the schema marked required: true without a printed asterisk; every other required-field determination follows the source's own asterisk convention.
  • "At least one of two phone numbers" not machine-enforced. Page 9 states "*(обавезно унети један од телефонских бројева)" (mandatory to enter one of the phone numbers) for taxAuthorityPhoneFixed / taxAuthorityPhoneMobile. GSP-0013's Condition grammar has no clean "at least one of two independently-optional fields" construct (only requiredWhen gated on a single condition, or crossFieldValidation's requirePresent under a when gate) — encoding this would require an artificial helper condition not grounded in any real form field, so this business rule is disclosed in both fields' own description rather than structurally enforced, consistent with this repository's established notEquals-against-an-absent-field avoidance discipline (no field-absence operator exists in the grammar).
  • businessFantasyNamebusinessActivityDescription cross-requirement disclosed, not enforced. The form states that if a Назив (fantasy name) is entered, Предмет пословања (business activity description) must also be entered. Encoding this as requiredWhen: { field: businessFantasyName, notEquals: "" } would trigger this registry's known bug class (no field-absence operator; notEquals "" against an undefined value evaluates true regardless, making the field effectively always-required) — disclosed in businessFantasyName's own description instead.
  • activityPermitOrLicense/procurationWrittenAuthorization conditional documents left required: false, not requiredWhen-gated. Both are genuinely conditional per the page-10 checklist's own prose (on regulated-activity status and on whether a procuration was granted, respectively), but neither condition is backed by a single boolean field in fields[] that cleanly captures it (procurator fields are all optional strings; there is no single "activity requires a permit" toggle) — modeled required: false with the condition disclosed in each document's own description, mirroring this registry's rw/rdb precedent for evidenceOfPaymentOfFee.
  • Two attestation-category documents[] entries, each anchored to a verbatim printed statement (SPEC §9.1). applicantSignature quotes page 1's own declaration ("Потписивањем регистрационе пријаве подносилац одговара за тачност унетих података.") and is required: true. A second, narrower attestation, vatRegistrationApplicantSignature, quotes page 9's own VAT-specific declaration ("ПОДНОСИМ ПРИЈАВУ ЗА ЕВИДЕНТИРАЊЕ ОБВЕЗНИКА ПОРЕЗА НА ДОДАТУ ВРЕДНОСТ") and is requiredWhen vatRegistrationRequested equals true — a distinct declaration/signature line specific to the optional VAT sub-request, not a duplicate of the page-1 signature.
  • Bounded repeating groups, not open-ended arrays. Page 6 (procurators: 1 individual + up to 3 joint) and page 7 (up to 3 branch/separate operating locations) are each modeled as a fixed number of flat, numbered fields (jointProcurator1FirstName.. jointProcurator3..., branchLocation1ActivityCode.. branchLocation3...), matching the source's own printed capacity per page and its own instruction to photocopy additional copies of that page for further repetitions beyond what is printed — consistent with this registry's established bounded-repeating-group convention (cf. Denmark/Finland entrantN/ childN precedent).
  • predominantActivityCode/branch ActivityCode pattern. Modeled with validation.pattern: "^\\d{4}$", matching the form's own comb-style 4-box digit entry and its instructional text ("...навођењем одговарајуће четвороцифрене шифре...", four-digit code).
  • vatEstimatedTurnover12Months minimum. Modeled with validation.minimum: 8000001, matching the form's own printed floor ("*обавезно унети податак у износу од најмање 8.000.001,00 динара или више").

Conformance fixtures

Two valid scenarios (0 errors each) plus nine mutation-control fixtures (each raising exactly one error), committed under conformance/rs/apr/jrpps-pr-sole-proprietor-registration/1.0.0/, checked with a purpose-written ad hoc script (validate_instance.mjs, mirroring this registry's established per-session pattern since no committed conformance-fixture validator exists): performs static required/type/ pattern/enum/minimum/maximum checks plus a from-scratch evaluator for the shared Condition grammar (requiredWhen/documents[].requiredWhen/ exclusivityGroups).

``` $ node validate_instance.mjs schema.json sole-proprietor-indefinite-lump-sum-no-vat.json sole-proprietor-indefinite-lump-sum-no-vat.json: 0 error(s)

$ node validate_instance.mjs schema.json sole-proprietor-fixed-term-vat-with-procurator.json sole-proprietor-fixed-term-vat-with-procurator.json: 0 error(s)

$ node validate_instance.mjs schema.json mutation-control-missing-required-field.json mutation-control-missing-required-field.json: 1 error(s) MISSING REQUIRED: entrepreneurFullName

$ node validate_instance.mjs schema.json mutation-control-invalid-enum-value.json mutation-control-invalid-enum-value.json: 1 error(s) VALIDATION ERROR: businessNameDesignation: value "sole-trader" not in enum ["preduzetnik","pr"]

$ node validate_instance.mjs schema.json mutation-control-invalid-date-format.json mutation-control-invalid-date-format.json: 1 error(s) TYPE ERROR: registeredUntilDate: expected ISO date string, got "31-12-2030"

$ node validate_instance.mjs schema.json mutation-control-email-pattern-violation.json mutation-control-email-pattern-violation.json: 1 error(s) VALIDATION ERROR: businessEmailAddress: value "not-an-email" does not match pattern ^[^@\s]+@[^@\s]+\.[^@\s]+$

$ node validate_instance.mjs schema.json mutation-control-missing-conditional-registered-until-date.json mutation-control-missing-conditional-registered-until-date.json: 1 error(s) MISSING REQUIRED: registeredUntilDate

$ node validate_instance.mjs schema.json mutation-control-missing-conditional-apr-org-unit-name.json mutation-control-missing-conditional-apr-org-unit-name.json: 1 error(s) MISSING REQUIRED: aprOrgUnitName

$ node validate_instance.mjs schema.json mutation-control-missing-conditional-vat-primary-activity-code.json mutation-control-missing-conditional-vat-primary-activity-code.json: 1 error(s) MISSING REQUIRED: vatPrimaryActivityCode

$ node validate_instance.mjs schema.json mutation-control-missing-required-document.json mutation-control-missing-required-document.json: 1 error(s) MISSING REQUIRED DOCUMENT: proofOfIdentity

$ node validate_instance.mjs schema.json mutation-control-exclusivity-group-violation.json mutation-control-exclusivity-group-violation.json: 1 error(s) EXCLUSIVITY GROUP VIOLATION: lumpSumVsPersonalSalaryElection: more than one of ["lumpSumTaxationRequested","personalSalaryPayoutElection"] is true ```

Both meta-schema validators were run against the finished document and pass clean:

``` $ node tools/validate.mjs registry/rs/apr/jrpps-pr-sole-proprietor-registration/1.0.0/schema.json ok registry/rs/apr/jrpps-pr-sole-proprietor-registration/1.0.0/schema.json 1/1 document(s) passed.

$ node tools/validate-ajv.mjs registry/rs/apr/jrpps-pr-sole-proprietor-registration/1.0.0/schema.json ok registry/rs/apr/jrpps-pr-sole-proprietor-registration/1.0.0/schema.json [v0.3] 1/1 document(s) validated against the meta-schema (ajv 2020-12). ```

tools/govschema-client/registry-index.json was regenerated via npm run build-index (in tools/govschema-client/, after npm ci --include=dev since a plain npm ci under a local NODE_ENV=production skips ajv's devDependency install) to include this document's entry.

Serbia's other verticals

Serbia opens at 1 of 6 verticals (Business Formation) via this schema. DMV, Taxes, Visa, National ID, and Passport are open, unscreened backlog candidates for future cycles.

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 Agencija za privredne registre (Agency for Business Registers) or any government. The authoritative source is always the live government form and its official instructions.