Registry entry

Romania — Single Declaration / Independent Activities, Real System (Formulary 212, Anexa nr.1)

The Agenția Națională de Administrare Fiscală's (ANAF, Romania's tax authority) Formulary 212, "Declarație unică privind impozitul pe venit și contribuțiile sociale datorate de persoanele fizice" (Single Declaration on income tax and social contributions owed by individuals) — the annual combined self-assessment declaration Romanian individual taxpayers file, distributed as a free unauthenticated download from ANAF's own static document host. Opens Romania's Taxes vertical, Romania's first published schema (50th jurisdiction). The source is a genuine 14-page static AcroForm (confirmed via `pdfjs-dist`: has `/AcroForm`, no `/XFA` key, no `NeedsRendering` flag) with 189 Widget annotations across 12 of the 14 pages (2 pages carry zero widgets). Formulary 212 is a single combined declaration covering many mutually-distinct taxpayer categories (independent-activity income under either the real-accounting system or a flat-rate expense quota, income taxed on a fixed income norm, tourism-rental income, agricultural income, foreign-sourced income of several kinds, voluntary health-contribution declarations for persons without other income) in one document with many conditional sections gated by the form's own "1. Categoria de venit" (Category of income) selector and a top-of-form "B. DATE PRIVIND SECȚIUNILE COMPLETATE" (Sections completed) checklist. This v1.0.0 scopes to the single most common filer profile: an individual with income from independent activities ("activități independente", category 1.1) taxed under the real accounting system ("sistem real", as opposed to the flat-rate expense-quota alternative), who owes both annual income tax and the CAS (pension) and CASS (health) social contributions, filing as a single individual (this form's declarant is always the natural person, not a joint household, so no spousal/joint-filing axis applies the way it does on e.g. this registry's `jo/istd` precedent). Models the taxpayer-identification block (§A), the top-of-form section-completed toggles relevant to this profile (§B), the independent-activities business-detail and income/expense worksheet (§Secțiunea 1/Subsecțiunea 1, including the form's own Category-of-income and net-income-determination-method selectors, each gating the worksheet fields via `requiredWhen`, consistent with this registry's `rs/mup` procedure-code-gated precedent), the CAS worksheet with its own printed income-threshold-bracket gate (§Secțiunea 3/Subsecțiunea 1), the CASS worksheet for independent-activity income (§Secțiunea 3/Subsecțiunea 2, point 2.1 only), and the declaration/signature block (§C authorized-agent identification, the annex-count fields, the attestation text, and both signature fields). 71 `fields[]` plus 1 `documents[]` entry (the declaration's own verbatim attestation text). Explicitly out of scope for v1.0.0 (disclosed, not silently dropped): every other "Categoria de venit" branch (IP rights, all rental-income variants, agricultural/forestry/fish-farming income, securities transfers, bond interest, the art.114 "other sources" categories) and their own worksheets; the flat-rate-expense-quota alternative to the real system; income taxed on a fixed norm (Subsecțiunea 2), tourism-rental income (Subsecțiunea 3), and agricultural-income-on-a-norm (Subsecțiunea 4); all of Secțiunea 2 (foreign-sourced income, in every category); Secțiunea 3/Subsecțiunea 2 point 2.2 (CASS for non-independent-activity income categories); Secțiunea 4, Secțiunea 5, and Secțiunea 6 (the form's own re-derivation of the final annual tax/CASS-difference computation), each of which was independently confirmed via `pdfjs-dist` to carry zero AcroForm Widget annotations on its own pages (11-12 of 14) — these rows are not independently fillable on this static specimen at all, apparently auto-computed by ANAF's own e-filing system from the data entered in the sections this schema does model, a materially different and more precise finding than this cycle's own pre-authoring briefing's framing of those 2 pages as generic "instructions"; Secțiunea 7's own summary-of-obligations subtotals (parts I-III, also zero-widget, same reason) though Secțiunea 7 part IV's own fillable roll-up boxes and Secțiunea 8's early-payment bonus are disclosed as a distinct, deliberately out-of-scope backlog item (not zero-widget, simply outside this v1.0.0's declared scope); and the entirety of Capitolul II (the voluntary CASS-opt-in chapter for persons without other qualifying income, including its own dependent-family-member sub-declarations). GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Government of Romania or the Agenția Națională de Administrare Fiscală.

Registry entry

ro/anaf/declaratie-unica-activitati-independente

Jurisdiction
Romania · national
Version
1.0.0
Verification
draft

Authoritative source ANAF Formulary 212 (Anexa nr.1), "Declarație unică privind impozitul pe venit și contribuțiile sociale datorate de persoanele fizice", file D_212_2736_2025.pdf, Last-Modified 2026-01-05

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

71 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

  • taxYear string required

    The 4-digit tax year this declaration covers.

    pattern
  • taxpayerFiscalId string required

    The taxpayer's fiscal identification code (CNP for a Romanian individual), printed as a 13-cell comb entry box.

    patternclassification: sensitive-pii
  • lastName string required

    The taxpayer's last name.

    classification: pii
  • fatherInitial string optional

    The initial of the taxpayer's father's first name, a Romanian civil-identification convention.

    classification: pii
  • firstName string required

    The taxpayer's first name(s).

    classification: pii
  • nonResident boolean optional

    Whether the taxpayer is a non-resident of Romania.

  • countryOfResidence string optional

    The taxpayer's country of residence, required only when the taxpayer is a non-resident.

  • foreignFiscalId string optional

    The taxpayer's foreign fiscal identification code, when one exists, printed as a 13-cell comb entry box.

    classification: sensitive-pii
  • street string required

    The street of the taxpayer's address.

    classification: pii
  • streetNumber string optional

    The street number of the taxpayer's address.

    classification: pii
  • block string optional

    The apartment-block identifier of the taxpayer's address, a common Romanian address element.

    classification: pii
  • entrance string optional

    The building entrance/stairwell identifier of the taxpayer's address.

    classification: pii
  • floor string optional

    The floor of the taxpayer's address.

    classification: pii
  • apartment string optional

    The apartment number of the taxpayer's address.

    classification: pii
  • countyOrSector string required

    The county (or, in Bucharest, sector) of the taxpayer's address.

    classification: pii
  • locality string required

    The locality (city/town/commune) of the taxpayer's address.

    classification: pii
  • postalCode string optional

    The postal code of the taxpayer's address.

    classification: pii
  • bankAccountIban string optional

    The taxpayer's bank account IBAN, for any refund due.

    classification: financial
  • phone string optional

    The taxpayer's telephone number.

    classification: pii
  • fax string optional

    The taxpayer's fax number.

  • email string optional

    The taxpayer's email address.

    classification: pii
  • isRectifyingChapterI boolean optional

    Whether this filing amends a previously filed Chapter I (the annual income-tax/social-contributions chapter this schema models) of the same declaration.

  • isRectifyingDueToComplianceNotice boolean optional

    Whether this filing amends a prior declaration in response to a compliance notice from ANAF.

  • reportsIndependentActivityRealSystemIncome boolean required

    Whether this filing completes Secțiunea 1/Subsecțiunea 1 (income taxed under the real system or the flat-rate expense quota) — always true for this schema's declared scope (independent-activity income under the real system).

  • owesSocialInsuranceContributionCAS boolean required

    Whether this filing completes Secțiunea 3/Subsecțiunea 1 (CAS, the pension social-insurance contribution) — always true for this schema's declared scope. Gates the CAS worksheet fields below.

  • owesHealthInsuranceContributionCASS boolean required

    Whether this filing completes Secțiunea 3/Subsecțiunea 2 (CASS, the health social-insurance contribution) — always true for this schema's declared scope. Gates the CASS worksheet fields below.

  • exemptUnderDoubleTaxationConvention boolean optional

    Whether the reported income is exempt under a double-taxation convention or EU legislation.

  • electsRomaniaTaxRegularization boolean optional

    Whether the taxpayer elects to have their income tax regularized in Romania.

  • incomeCategory enum required

    The category of income this Subsecțiunea 1 filing reports. This schema's worksheet fields (business details, income/expense worksheet) are gated `requiredWhen` this equals "independent_activities" (point 1.1); every other printed category is disclosed as out of scope for this v1.0.0. The source prints this as 17 individual checkboxes (one per category/sub-category), not a single radio control; modeled as a single enum consistent with this registry's `rs/mup` procedure-selector precedent.

    enum: 17 values
  • netIncomeDeterminationMethod enum required

    The method used to determine net income: the real accounting system (this schema's declared scope) or a flat-rate expense quota (disclosed as out of scope for this v1.0.0 — no further fields beyond this selector are modeled for that branch).

    enum: real_system | flat_rate_expense_quota
  • organizationForm enum required

    The form of organization under which the activity is carried out.

    enum: individual | association_without_legal_personality | fiscal_transparency_regime_entity | change_of_activity_exercise_form
  • mainActivityDescription string optional

    A description of the main object of the independent activity.

  • caenCode string optional

    The 4-digit CAEN (Romanian standard industrial activity classification) code of the main activity.

    pattern
  • businessAddress string optional

    The registered office of the activity, or identifying details of the asset whose use is being ceded (this last clause applies mainly to the rental-income category, out of scope for this v1.0.0).

    classification: pii
  • authorizationDocumentNumber string optional

    The number of the document authorizing the activity (or the rental contract, out of scope for this v1.0.0).

  • authorizationDocumentDate date optional

    The date of the document authorizing the activity.

  • associationContractNumber string optional

    The number of the association contract, when the activity is organized as an association without legal personality.

  • associationContractDate date optional

    The date of the association contract.

  • activityStartDate date optional

    The date the activity began.

  • activityEndDate date optional

    The date the activity ended, if applicable.

  • activitySuspensionDate date optional

    The date the activity was suspended, if applicable.

  • disabilityExemptionDays integer optional

    The number of exemption days for a taxpayer with a severe or pronounced disability who earns income exempt from income tax.

    range: 0–∞
  • grossIncome number optional

    Row 1 of the real-system income/expense worksheet: gross income.

    range: 0–∞classification: financial
  • deductibleExpenses number optional

    Row 2 of the worksheet: deductible expenses, per law.

    range: 0–∞classification: financial
  • netAnnualIncome number optional

    Row 3: net annual income, computed as row 1 minus row 2.

    classification: financial
  • annualFiscalLoss number optional

    Row 4: annual fiscal loss, computed as row 2 minus row 1, when expenses exceed income.

    range: 0–∞classification: financial
  • priorYearLossesCarriedForward number optional

    Row 5: fiscal/net annual losses carried forward from prior years.

    range: 0–∞classification: financial
  • lossOffsetInReportingYear number optional

    Row 6: fiscal loss offset in the reporting year, per the form's own footnoted computation (the lesser of 70% of row 3 and row 5).

    range: 0–∞classification: financial
  • netTaxableAnnualIncome number optional

    Row 7: net taxable annual income, computed as row 3 minus row 6. This is the figure the CAS/CASS worksheets below reference as "total annual income from independent activities."

    classification: financial
  • reducedNetTaxableIncome number optional

    Row 8: reduced net taxable annual income. Per the form's own footnote, this row is completed only by severely/pronounced-disabled taxpayers whose income is exempt from tax under the flat-rate-expense-quota or other non-real-system categories — not applicable to (left blank by) this schema's real-system independent-activities scope.

    classification: financial
  • annualIncomeTaxDue number optional

    Row 9: annual income tax due. Per the form's own footnote 3, this row is NOT completed by taxpayers realizing independent-activity or IP-rights income taxed under the real system (this schema's scope) — the authoritative final tax computation for that profile is instead performed in Secțiunea 4, which this specimen exposes with zero AcroForm widgets (see this schema's own VERIFICATION.md) — except that a filer with a fiscal loss enters "0" here.

    range: 0–∞classification: financial
  • casIncomeThresholdBracket enum optional

    The printed income-threshold bracket that determines whether, and at what base, CAS (pension social-insurance contribution) is owed: realized income between 12 and 24 gross minimum wages, at least 24 gross minimum wages, above a recalculated minimum threshold, or below the minimum threshold with a voluntary opt-in.

    enum: between_12_and_24_minimum_wages | at_least_24_minimum_wages | above_recalculated_minimum_threshold | below_minimum_opts_in
  • totalAnnualIncomeIndependentActivitiesAndIpRights number optional

    CAS worksheet row 1: total annual income realized from independent activities and IP rights, per art.148 alin.(1) of the Fiscal Code.

    range: 0–∞classification: financial
  • casCalculationBase number optional

    CAS worksheet row 2: the annual CAS calculation base (the income chosen for CAS payment).

    range: 0–∞classification: financial
  • casDue number optional

    CAS worksheet row 3: CAS due, computed as row 2 times 25%.

    range: 0–∞classification: financial
  • casWithheldByPayer number optional

    CAS worksheet row 4: CAS already withheld by the income payer, when applicable.

    range: 0–∞classification: financial
  • casPositiveDifference number optional

    CAS worksheet row 5: the positive difference between CAS due and CAS withheld (row 3 minus row 4; equals row 3 outright when row 4 is not completed, per the form's own footnote).

    classification: financial
  • cassTotalAnnualIncomeIndependentActivities number optional

    CASS worksheet (point 2.1, independent-activity income) row 1: total annual cumulative income from independent activities, per art.170 alin.(1) of the Fiscal Code.

    range: 0–∞classification: financial
  • cassCalculationBase number optional

    CASS worksheet row 2: the annual CASS calculation base, capped at the level of 60 gross minimum wages per the form's own footnote.

    range: 0–∞classification: financial
  • cassAnnual number optional

    CASS worksheet row 3: annual CASS, computed as row 2 times 10%.

    range: 0–∞classification: financial
  • cassDueFromOptIn number optional

    CASS worksheet row 4: CASS due as a result of a voluntary opt-in under art.180 alin.(2) of the Fiscal Code.

    range: 0–∞classification: financial
  • cassDue number optional

    CASS worksheet row 5: CASS due, computed as row 3 minus row 4, or "0" per the form's own footnoted rule.

    classification: financial
  • cassWithheldByPayer number optional

    CASS worksheet row 6: CASS already withheld by the income payer, when applicable.

    range: 0–∞classification: financial
  • cassPositiveDifference number optional

    CASS worksheet row 7: the positive difference between CASS due and CASS withheld.

    classification: financial
  • cassNegativeDifference number optional

    CASS worksheet row 8: the negative difference between CASS withheld and CASS due. The form's own warning notes a income-tax consequence at Secțiunea 6 (out of scope for this v1.0.0) when withheld CASS exceeds a printed threshold.

    classification: financial
  • annexFromNumber integer optional

    The first annex number, when one or more Anexa (companion single-form annexes for additional income categories/sources) are attached to this declaration.

    range: 1–∞
  • annexToNumber integer optional

    The last annex number, when one or more Anexa are attached to this declaration.

    range: 1–∞
  • authorizedAgentName string optional

    The name of the authorized agent or fiscal curator declaring on the taxpayer's behalf, when applicable.

    classification: pii
  • authorizedAgentFiscalId string optional

    The fiscal identification code of the authorized agent or fiscal curator, when applicable.

    classification: sensitive-pii
  • taxpayerSignature string required

    The taxpayer's name, standing in for their physical signature, attesting the declaration.

    classification: pii
  • authorizedAgentOrFiscalCuratorSignature string optional

    The authorized agent's or fiscal curator's name, standing in for their physical signature, when the declaration is filed on the taxpayer's behalf.

    classification: pii

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-2797. This schema opens Romania's Taxes vertical — Romania's first published schema, making Romania the registry's 50th jurisdiction.

Source verification (independently re-derived, not copied from the task briefing)

  • PDF source: https://static.anaf.ro/static/10/Anaf/formulare/D_212_2736_2025.pdf — fetched independently this cycle via curl:
    • HTTP 200, Content-Type: application/pdf, 620,762 bytes, Last-Modified: Mon, 05 Jan 2026 12:34:53 GMT.
    • sha256: fb6822ac5feb35c99ebdb8dd29a74e284a4ab101a6a1431ccaeb42ea4731f9b2 (computed via sha256sum on the freshly-downloaded file) — matches the truncated hash given in this cycle's own pre-authoring briefing byte-for-byte (fb6822ac...4731f9b2), independently re-derived in full rather than trusted verbatim.
    • Confirmed a genuine, static AcroForm directly on the raw PDF bytes: the literal string AcroForm is present, /XFA is absent, and NeedsRendering is absent — not a dynamic XFA form, consistent with (and independently re-confirming) this cycle's briefing.

PDF structure, independently confirmed via pdfjs-dist@3 (legacy build) + canvas

  • 14 pages. page.getAnnotations({intent: "display"}) (equivalently "any" — cross-checked, identical counts) returns 189 Widget-subtype annotations in total, distributed across pages 1-10 and 13-14; pages 11 and 12 carry zero Widget annotations — matching this cycle's briefing figure of 189 widgets across 12 of 14 fillable pages.
  • Correction to this cycle's own pre-authoring briefing: the briefing described the 2 non-widget pages generically as "instructions, not fillable." Independent inspection of pages 11-12's own text layer (getTextContent(), row-grouped by y-coordinate) found this imprecise: those 2 pages are not instructional prose at all — they are the form's own Secțiunea 4 ("Stabilirea impozitului anual datorat... din activități independente, impus în sistem real"), Subsecțiunea 4.1/4.2 (CAS/CASS deductibility computation), Secțiunea 5/5.1 (the IP-rights equivalent), and Secțiunea 6 (CASS-recalculation-difference tax) worksheets, each with fully legible printed row labels and formulas but zero fillable AcroForm widgets. The practical implication is the same as "not fillable," but the reason is different and more specific: these rows appear to be auto-computed by ANAF's own e-filing system from data entered in the sections this schema does model (Secțiunea 1/Subsecțiunea 1, Secțiunea 3), not blank instructional space. This is disclosed here as a materially more precise finding than the pre-cycle briefing, not a silent correction.
  • Field-type metadata proved unreliable for this specimen — the visual page-render cross-check was load-bearing, not secondary. The task briefing expected pdfjs-dist's own AcroForm field-type extraction (Tx/Btn/Ch, checkBox/radioButton flags) to be more reliable than text-position correlation for a genuine AcroForm. In practice, this specimen's own Parent/Kids field hierarchy appears malformed: dozens of annotations that are visually and semantically obvious single-line text boxes (e.g. "Nume," "Strada," every "(lei)" comb-style amount box) report fieldType: "Btn" with both checkBox and radioButton false, rather than Tx. Only 8 of the 189 widgets report fieldType: "Tx" in the whole document (these correspond to the CNP/CAEN comb-style numeric-ID boxes). Every field's true type in this schema was therefore determined from both pages' full page renders (via pdfjs-dist + node-canvas, 2.0x scale, standardFontDataUrl set) and the row-grouped text-layer transcript, cross-checked against each other — not from the AcroForm's own per-widget type metadata, which this cycle found to be unreliable for this specific document. The overall widget count (189) and per-page distribution from getAnnotations() were still independently useful and are confirmed accurate; it is only the per-widget fieldType/checkBox classification that could not be trusted.
  • Pages 1, 2, 3, 4, 9, 10, 13, and 14 (every page this schema's fields[] cites) were rendered to PNG and visually inspected to confirm layout, checkbox-vs-text-box distinction, and comb-box digit counts (13 for the domestic/foreign fiscal-ID boxes on page 1, 4 for the CAEN code box on page 3), consistent with Romania's own CNP (13-digit) and CAEN (4-digit) formats.

Field derivation

The form's structure (Formulary 212, "Declarație unică..."), reconstructed from the row-grouped text layer of every page cited and cross-checked against the corresponding page render:

Page 1 — §A taxpayer identification (fiscal ID, name, father's initial, non-resident/country-of-residence, foreign fiscal ID, full address, bank IBAN, phone/fax/email); §B "Date privind secțiunile completate" — a top-of-form checklist of which of the form's own Sections/Subsections this filing completes (amendment-reason checkboxes; Secțiunea 1 Subsecțiunile 1-4; Secțiunea 2 Subsecțiunile 1-3; Secțiunea 3 Subsecțiunile 1-2; Secțiunile 4, 5, 6, 8).

Page 2 — Capitolul II's own intro checklist (out of scope) and §C, identification of an authorized agent/fiscal curator (shared across the whole declaration, not just Capitolul II).

Page 3 — Secțiunea 1/Subsecțiunea 1 §A "Date privind activitatea desfășurată": exemption/regularization checkboxes; point 1 "Categoria de venit" (17 individual checkboxes spanning categories 1.1 activități independente through 1.7.4); point 2 "Determinarea venitului net" (sistem real / cote forfetare de cheltuieli); point 3 "Forma de organizare"; points 4-11 (main activity/CAEN code, business address, authorization/association contract particulars, activity start/end/suspension dates, disability exemption days).

Page 4 (top) — Secțiunea 1/Subsecțiunea 1 §B "Date privind impozitul anual datorat," the real-system income/expense worksheet, rows 1-9 (gross income through annual income tax due), with the form's own footnotes 2 and 3 disclosing that rows 8-9 are not completed by this schema's own target filer profile (independent-activity income under the real system) except to enter "0" on row 9 in a loss scenario. (The remainder of page 4 — Subsecțiunea 2, norma-de-venit taxation — is out of scope.)

Pages 5-8 — Subsecțiunea 2 (norma de venit) continuation, Subsecțiunea 3 (tourist room rental), Subsecțiunea 4 (agricultural income), and Secțiunea 2 (foreign-sourced income, every category) — all out of scope for this v1.0.0.

Page 9 — Secțiunea 2/Subsecțiunea 2-3 tail (foreign-sourced CAS/CASS/pension income, out of scope) then Secțiunea 3/Subsecțiunea 1 "Date privind contribuția de asigurări sociale datorată" (CAS): the printed A/A.1/ A.2/A.3/B income-threshold-bracket checkboxes, then worksheet rows 1-5 (total qualifying income through the positive CAS difference).

Page 10 — Secțiunea 3/Subsecțiunea 2 "Date privind contribuția de asigurări sociale de sănătate datorată" (CASS): point 2.1 (independent- activity income, in scope, worksheet rows 1-8) and point 2.2 (every other income category eligible for CASS, out of scope, with its own separate threshold checkboxes and table).

Pages 11-12 — Secțiunea 4, 4.1, 4.2, 5, 5.1, and 6 worksheets: zero AcroForm widgets (see above); out of scope, not independently fillable on this static specimen.

Page 13 — Secțiunea 7 part IV ("Obligații fiscale de plată/de restituit," a fillable roll-up of the — themselves zero-widget — parts I-III computed subtotals) and Secțiunea 8 (early-payment bonus): both disclosed as a deliberately out-of-scope backlog item (not zero-widget, simply outside this v1.0.0's declared scope); then Capitolul II (voluntary CASS opt-in for persons without other income), Secțiunea 1 and the start of Secțiunea 2 — out of scope.

Page 14 — Capitolul II Secțiunea 2 continuation and Secțiunea 3 (out of scope); the annex-count fields ("Anexele nr. ... - ..."); the verbatim attestation statement; the taxpayer's and authorized-agent's/fiscal curator's signature fields.

Every in-scope printed field was mapped to one of this schema's 71 fields[] entries or its 1 documents[] entry. See the schema's own sourceRef on each field for the exact page/row/label it was read from.

Scoping and modeling judgment calls

  • Scoped to one filer profile of many. Formulary 212 is a single combined declaration covering many mutually distinct income categories and CAS/CASS bases in one document. Consistent with this registry's established precedent for scoping a v1.0.0 to the dominant filing category rather than modeling every branch (e.g. jo/istd, rs/purs, gh/gra), this v1.0.0 models exactly one profile: independent-activity income (category 1.1) taxed under the real accounting system (not the flat-rate expense quota), with both CAS and CASS owed, filed by a single individual. Every other branch is explicitly disclosed as out of scope in the schema's own description (IP rights; every rental-income variant; agricultural/ forestry/fish-farming income; securities transfers; bond interest; the art.114 "other sources" categories; income taxed on a fixed norm; tourism- rental income; foreign-sourced income of any category; CASS for non-independent-activity income; Secțiunea 4/5/6's own recomputation; Secțiunea 7/8; and the entirety of Capitolul II).
  • incomeCategory and netIncomeDeterminationMethod as requiredWhen gates, consistent with rs/mup's procedure-code-gated precedent. The source prints "1. Categoria de venit" as 17 independent checkboxes (not a single radio control) and "2. Determinarea venitului net" as 2 independent checkboxes; both are modeled as single enum fields (matching this registry's established practice of collapsing a source's own mutually- exclusive multi-checkbox selector into one enum), and the income/expense worksheet fields are gated requiredWhen {"all": [...]} both equal their in-scope value — the first documented use of the all composite condition (GSP-0013) in this registry's own requiredWhen usage, as opposed to a single leaf condition.
  • CAS/CASS's own printed threshold gate modeled directly. Secțiunea 3/ Subsecțiunea 1 prints its own A/A.1/A.2/A.3/B income-threshold-bracket checkboxes (whether realized income sits between 12-24 minimum wages, at least 24, above a recalculated minimum, or below the minimum with a voluntary opt-in); modeled as casIncomeThresholdBracket, an enum requiredWhen owesSocialInsuranceContributionCAS is true. Secțiunea 3/ Subsecțiunea 2 point 2.1 (CASS for independent-activity income) prints no equivalent threshold checkboxes of its own (point 2.2, out of scope, has its own separate set) — its worksheet fields are gated only on owesHealthInsuranceContributionCASS.
  • Section-B "sections completed" toggles modeled as fixed, static required: true booleans, not a single enum. Unlike incomeCategory (a true mutually-exclusive selector) the source's own §B checklist is a genuine multi-select (a filer can complete several Sections/Subsections at once); reportsIndependentActivityRealSystemIncome, owesSocialInsuranceContributionCAS, and owesHealthInsuranceContributionCASS are modeled as independent booleans, each fixed true for this schema's declared single-profile scope, and used as the CAS/CASS worksheets' own gates. isRectifyingChapterI and isRectifyingDueToComplianceNotice (the two remaining §B toggles relevant to Capitolul I amendments) are modeled as ordinary optional booleans; the audit-reserve-annulment amendment reason (art.105 alin.(6) lit.a)/lit.b)) and every other Section/Subsection's own §B toggle are out of scope, consistent with those sections' own worksheets being out of scope.
  • Rows 8-9 of the real-system worksheet modeled required: false with an explanatory description, not excluded. The specimen's own footnotes 2 and 3 (page 4) state row 8 applies only to disabled-exemption filers under other categories and row 9 is not completed at all for this schema's own target profile (the authoritative computation instead happens in Secțiunea 4, which is zero-widget — see above) except to enter "0" in a loss scenario. Rather than silently excluding these two printed rows, they are kept in fields[], required: false, with the footnote's own caveat quoted in description — consistent with this registry's jo/istd precedent of disclosing a printed footnote caveat in-line rather than dropping the row.
  • CNP/foreign-fiscal-ID/CAEN comb boxes collapsed to single string fields. The source implements these as 13-cell (fiscal ID) or 4-cell (CAEN) comb-style entry boxes, each a single logical value; modeled as one pattern-constrained string field per box, consistent with this registry's standard treatment of comb-style numeric-ID boxes.
  • Authorized-agent/fiscal-curator identification modeled minimally. Only name and fiscal ID are modeled from §C's own address block (page 2), consistent with jo/istd's minimal taxAgentTin/taxAgentNationalId precedent for a non-primary declarant's particulars.
  • No edition axis used, despite this being an annual filing. Unlike the US 1040/FAFSA-style forms this registry's edition axis (GSP-0005) targets, and consistent with this registry's own jo/istd precedent for another annual personal-tax-return schema, the tax year is modeled as an ordinary taxYear field (pattern ^[0-9]{4}$) rather than a path-level edition, since this registry has not yet established an edition-tracking discipline for this specific form family.

Conformance run

Two hand-authored valid fixtures under conformance/ro/anaf/declaratie-unica-activitati-independente/1.0.0/:

  • valid-standard-independent-activity-filer.json — a resident individual, original (non-amending) filing, independent-activity income under the real system, individual organization form, owing both CAS (at or above the 24-minimum-wage bracket) and CASS.
  • valid-nonresident-association-with-loss-carryforward.json — a non-resident filer (exercising countryOfResidence/foreignFiscalId), organized as an association without legal personality (exercising associationContractNumber/associationContractDate), an amending ("rectificativă") filing with a current-year fiscal loss and a prior-year loss carryforward partially offset, CAS owed under the below-minimum opt-in bracket, an attached annex, and a declaration filed through an authorized agent (exercising authorizedAgentName/authorizedAgentFiscalId/ authorizedAgentOrFiscalCuratorSignature).

Six mutation-control fixtures, each isolated to raise exactly one error:

  • mutation-control-missing-taxpayer-fiscal-id.json — drops taxpayerFiscalId (static required: true) from the standard valid fixture.
  • mutation-control-invalid-enum-income-category.json — sets incomeCategory to "agricultural_activities_invalid", not one of the enum's 17 values.
  • mutation-control-invalid-pattern-caen-code.json — sets caenCode to "12" (2 digits), violating the field's ^[0-9]{4}$ pattern.
  • mutation-control-missing-conditional-country-of-residence.json — starts from the non-resident valid fixture (nonResident: true) and drops only countryOfResidence, isolating the requiredWhen violation.
  • mutation-control-missing-conditional-cas-due.json — starts from the standard valid fixture (owesSocialInsuranceContributionCAS: true) and drops only casDue, isolating the CAS-worksheet requiredWhen violation.
  • mutation-control-invalid-pattern-tax-year.json — sets taxYear to "25" (2 digits), violating the field's ^[0-9]{4}$ pattern.

All eight fixtures were checked with a from-scratch Node conformance checker (check-conformance.mjs, not committed — a disposable script, per this registry's own established practice) implementing this schema's own required/requiredWhen (including the all/any/not composite Condition grammar)/type/validation.enum/validation.pattern/ validation.minimum/validation.maximum grammar directly:

`` $ node check-conformance.mjs schema.json conformance/ro/anaf/declaratie-unica-activitati-independente/1.0.0 PASS mutation-control-invalid-enum-income-category.json: expected 1 error(s), got 1 -> invalid enum value for incomeCategory: agricultural_activities_invalid PASS mutation-control-invalid-pattern-caen-code.json: expected 1 error(s), got 1 -> invalid pattern for caenCode: 12 PASS mutation-control-invalid-pattern-tax-year.json: expected 1 error(s), got 1 -> invalid pattern for taxYear: 25 PASS mutation-control-missing-conditional-cas-due.json: expected 1 error(s), got 1 -> missing required field: casDue PASS mutation-control-missing-conditional-country-of-residence.json: expected 1 error(s), got 1 -> missing required field: countryOfResidence PASS mutation-control-missing-taxpayer-fiscal-id.json: expected 1 error(s), got 1 -> missing required field: taxpayerFiscalId PASS valid-nonresident-association-with-loss-carryforward.json: expected 0 error(s), got 0 PASS valid-standard-independent-activity-filer.json: expected 0 error(s), got 0 ``

All six negative controls raised exactly one error each, and neither valid scenario raised an unexpected error.

The registry's ajv-based meta-schema validator was run against the schema document and passes:

`` $ node tools/validate-ajv.mjs registry/ro/anaf/declaratie-unica-activitati-independente/1.0.0/schema.json ok registry/ro/anaf/declaratie-unica-activitati-independente/1.0.0/schema.json [v0.3] 1/1 document(s) validated against the meta-schema (ajv 2020-12). ``

tools/node_modules did not have pdfjs-dist/canvas present in this worktree at the start of this cycle (nor ajv/ajv-formats, since node_modules did not exist at all yet). npm ci --include=dev installed ajv/ajv-formats; a subsequent bare npm install pdfjs-dist@3 canvas --no-save then silently removed both — reproducing this registry's own documented gotcha, here traced specifically to this sandbox's global NODE_ENV=production, which makes a plain npm install treat devDependencies as extraneous and prune them even though --no-save was given. Recovered by re-running npm ci --include=dev, then installing pdfjs-dist/canvas with the environment variable explicitly cleared for that one command (NODE_ENV= npm install pdfjs-dist@3 canvas --no-save --include=dev), after which ajv, ajv-formats, pdfjs-dist, and canvas were all simultaneously present.

tools/govschema-client/registry-index.json was regenerated via npm run build-index inside tools/govschema-client/: 420 total schema documents (up from 419), 50 jurisdictions (up from 49), with the new ro/anaf/declaratie-unica-activitati-independente entry present.

Scope and jurisdiction notes

  • Opens Romania's Taxes vertical — Romania's first published schema, making Romania the registry's 50th jurisdiction. Passport, DMV, Business Formation, Visa, and National ID & Civic Documents are all open, unscreened backlog candidates for Romania — not screened this cycle.
  • jurisdiction.level is national — ANAF is Romania's national tax authority.
  • process.type is filing, matching the form's own nature as an annual combined self-assessment declaration.
  • process.language is ro: the specimen's full text layer is entirely in Romanian; no English-language parallel edition was located or expected for a domestic self-assessment form of this kind.

Re-verification

Per the practice's cadence, nextReviewBy is set to 2027-01-13 (6 months). A future review should prioritize: (1) confirming whether the 2026 tax year has produced a new edition of Formulary 212 at a new URL (ANAF typically republishes this form annually); (2) whether a future cycle wants to author one or more of this v1.0.0's disclosed out-of-scope categories (IP rights and rental income are likely the next-most-common, after independent activities) as a companion version or schema; (3) whether Romania's other five verticals (Passport, DMV, Business Formation, Visa, National ID & Civic Documents) should be scouted in a future cycle.

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 Agenția Națională de Administrare Fiscală or any government. The authoritative source is always the live government form and its official instructions.