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
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
- Schema document
registry/ro/anaf/declaratie-unica-activitati-independente/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/ro/anaf/declaratie-unica-activitati-independente/1.0.0/VERIFICATION.mdtext/markdown- 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
-
taxYearstring requiredThe 4-digit tax year this declaration covers.
pattern -
taxpayerFiscalIdstring requiredThe taxpayer's fiscal identification code (CNP for a Romanian individual), printed as a 13-cell comb entry box.
patternclassification: sensitive-pii -
lastNamestring requiredThe taxpayer's last name.
classification: pii -
fatherInitialstring optionalThe initial of the taxpayer's father's first name, a Romanian civil-identification convention.
classification: pii -
firstNamestring requiredThe taxpayer's first name(s).
classification: pii -
nonResidentboolean optionalWhether the taxpayer is a non-resident of Romania.
-
countryOfResidencestring optionalThe taxpayer's country of residence, required only when the taxpayer is a non-resident.
-
foreignFiscalIdstring optionalThe taxpayer's foreign fiscal identification code, when one exists, printed as a 13-cell comb entry box.
classification: sensitive-pii -
streetstring requiredThe street of the taxpayer's address.
classification: pii -
streetNumberstring optionalThe street number of the taxpayer's address.
classification: pii -
blockstring optionalThe apartment-block identifier of the taxpayer's address, a common Romanian address element.
classification: pii -
entrancestring optionalThe building entrance/stairwell identifier of the taxpayer's address.
classification: pii -
floorstring optionalThe floor of the taxpayer's address.
classification: pii -
apartmentstring optionalThe apartment number of the taxpayer's address.
classification: pii -
countyOrSectorstring requiredThe county (or, in Bucharest, sector) of the taxpayer's address.
classification: pii -
localitystring requiredThe locality (city/town/commune) of the taxpayer's address.
classification: pii -
postalCodestring optionalThe postal code of the taxpayer's address.
classification: pii -
bankAccountIbanstring optionalThe taxpayer's bank account IBAN, for any refund due.
classification: financial -
phonestring optionalThe taxpayer's telephone number.
classification: pii -
faxstring optionalThe taxpayer's fax number.
-
emailstring optionalThe taxpayer's email address.
classification: pii -
isRectifyingChapterIboolean optionalWhether this filing amends a previously filed Chapter I (the annual income-tax/social-contributions chapter this schema models) of the same declaration.
-
isRectifyingDueToComplianceNoticeboolean optionalWhether this filing amends a prior declaration in response to a compliance notice from ANAF.
-
reportsIndependentActivityRealSystemIncomeboolean requiredWhether 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).
-
owesSocialInsuranceContributionCASboolean requiredWhether 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.
-
owesHealthInsuranceContributionCASSboolean requiredWhether 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.
-
exemptUnderDoubleTaxationConventionboolean optionalWhether the reported income is exempt under a double-taxation convention or EU legislation.
-
electsRomaniaTaxRegularizationboolean optionalWhether the taxpayer elects to have their income tax regularized in Romania.
-
incomeCategoryenum requiredThe 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 -
netIncomeDeterminationMethodenum requiredThe 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 -
organizationFormenum requiredThe 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 -
mainActivityDescriptionstring optionalA description of the main object of the independent activity.
-
caenCodestring optionalThe 4-digit CAEN (Romanian standard industrial activity classification) code of the main activity.
pattern -
businessAddressstring optionalThe 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 -
authorizationDocumentNumberstring optionalThe number of the document authorizing the activity (or the rental contract, out of scope for this v1.0.0).
-
authorizationDocumentDatedate optionalThe date of the document authorizing the activity.
-
associationContractNumberstring optionalThe number of the association contract, when the activity is organized as an association without legal personality.
-
associationContractDatedate optionalThe date of the association contract.
-
activityStartDatedate optionalThe date the activity began.
-
activityEndDatedate optionalThe date the activity ended, if applicable.
-
activitySuspensionDatedate optionalThe date the activity was suspended, if applicable.
-
disabilityExemptionDaysinteger optionalThe number of exemption days for a taxpayer with a severe or pronounced disability who earns income exempt from income tax.
range: 0–∞ -
grossIncomenumber optionalRow 1 of the real-system income/expense worksheet: gross income.
range: 0–∞classification: financial -
deductibleExpensesnumber optionalRow 2 of the worksheet: deductible expenses, per law.
range: 0–∞classification: financial -
netAnnualIncomenumber optionalRow 3: net annual income, computed as row 1 minus row 2.
classification: financial -
annualFiscalLossnumber optionalRow 4: annual fiscal loss, computed as row 2 minus row 1, when expenses exceed income.
range: 0–∞classification: financial -
priorYearLossesCarriedForwardnumber optionalRow 5: fiscal/net annual losses carried forward from prior years.
range: 0–∞classification: financial -
lossOffsetInReportingYearnumber optionalRow 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 -
netTaxableAnnualIncomenumber optionalRow 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 -
reducedNetTaxableIncomenumber optionalRow 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 -
annualIncomeTaxDuenumber optionalRow 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 -
casIncomeThresholdBracketenum optionalThe 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 -
totalAnnualIncomeIndependentActivitiesAndIpRightsnumber optionalCAS 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 -
casCalculationBasenumber optionalCAS worksheet row 2: the annual CAS calculation base (the income chosen for CAS payment).
range: 0–∞classification: financial -
casDuenumber optionalCAS worksheet row 3: CAS due, computed as row 2 times 25%.
range: 0–∞classification: financial -
casWithheldByPayernumber optionalCAS worksheet row 4: CAS already withheld by the income payer, when applicable.
range: 0–∞classification: financial -
casPositiveDifferencenumber optionalCAS 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 -
cassTotalAnnualIncomeIndependentActivitiesnumber optionalCASS 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 -
cassCalculationBasenumber optionalCASS 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 -
cassAnnualnumber optionalCASS worksheet row 3: annual CASS, computed as row 2 times 10%.
range: 0–∞classification: financial -
cassDueFromOptInnumber optionalCASS 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 -
cassDuenumber optionalCASS worksheet row 5: CASS due, computed as row 3 minus row 4, or "0" per the form's own footnoted rule.
classification: financial -
cassWithheldByPayernumber optionalCASS worksheet row 6: CASS already withheld by the income payer, when applicable.
range: 0–∞classification: financial -
cassPositiveDifferencenumber optionalCASS worksheet row 7: the positive difference between CASS due and CASS withheld.
classification: financial -
cassNegativeDifferencenumber optionalCASS 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 -
annexFromNumberinteger optionalThe first annex number, when one or more Anexa (companion single-form annexes for additional income categories/sources) are attached to this declaration.
range: 1–∞ -
annexToNumberinteger optionalThe last annex number, when one or more Anexa are attached to this declaration.
range: 1–∞ -
authorizedAgentNamestring optionalThe name of the authorized agent or fiscal curator declaring on the taxpayer's behalf, when applicable.
classification: pii -
authorizedAgentFiscalIdstring optionalThe fiscal identification code of the authorized agent or fiscal curator, when applicable.
classification: sensitive-pii -
taxpayerSignaturestring requiredThe taxpayer's name, standing in for their physical signature, attesting the declaration.
classification: pii -
authorizedAgentOrFiscalCuratorSignaturestring optionalThe 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:draftverification.method:manual-source-review-v1verification.lastVerifiedAt:2026-07-13maturity.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 viacurl:- HTTP 200,
Content-Type: application/pdf, 620,762 bytes,Last-Modified: Mon, 05 Jan 2026 12:34:53 GMT. sha256:fb6822ac5feb35c99ebdb8dd29a74e284a4ab101a6a1431ccaeb42ea4731f9b2(computed viasha256sumon 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
AcroFormis present,/XFAis absent, andNeedsRenderingis absent — not a dynamic XFA form, consistent with (and independently re-confirming) this cycle's briefing.
- HTTP 200,
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 byy-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/radioButtonflags) 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) reportfieldType: "Btn"with bothcheckBoxandradioButtonfalse, rather thanTx. Only 8 of the 189 widgets reportfieldType: "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 (viapdfjs-dist+node-canvas, 2.0x scale,standardFontDataUrlset) 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 fromgetAnnotations()were still independently useful and are confirmed accurate; it is only the per-widgetfieldType/checkBoxclassification 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 owndescription(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). incomeCategoryandnetIncomeDeterminationMethodasrequiredWhengates, consistent withrs/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 gatedrequiredWhen{"all": [...]}both equal their in-scope value — the first documented use of theallcomposite condition (GSP-0013) in this registry's ownrequiredWhenusage, 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 enumrequiredWhenowesSocialInsuranceContributionCASistrue. 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 onowesHealthInsuranceContributionCASS. - Section-B "sections completed" toggles modeled as fixed, static
required: truebooleans, not a single enum. UnlikeincomeCategory(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, andowesHealthInsuranceContributionCASSare modeled as independent booleans, each fixedtruefor this schema's declared single-profile scope, and used as the CAS/CASS worksheets' own gates.isRectifyingChapterIandisRectifyingDueToComplianceNotice(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: falsewith an explanatorydescription, 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 infields[],required: false, with the footnote's own caveat quoted indescription— consistent with this registry'sjo/istdprecedent 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 minimaltaxAgentTin/taxAgentNationalIdprecedent for a non-primary declarant's particulars. - No
editionaxis used, despite this being an annual filing. Unlike the US 1040/FAFSA-style forms this registry'seditionaxis (GSP-0005) targets, and consistent with this registry's ownjo/istdprecedent for another annual personal-tax-return schema, the tax year is modeled as an ordinarytaxYearfield (pattern^[0-9]{4}$) rather than a path-leveledition, 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 (exercisingcountryOfResidence/foreignFiscalId), organized as an association without legal personality (exercisingassociationContractNumber/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 (exercisingauthorizedAgentName/authorizedAgentFiscalId/authorizedAgentOrFiscalCuratorSignature).
Six mutation-control fixtures, each isolated to raise exactly one error:
mutation-control-missing-taxpayer-fiscal-id.json— dropstaxpayerFiscalId(staticrequired: true) from the standard valid fixture.mutation-control-invalid-enum-income-category.json— setsincomeCategoryto"agricultural_activities_invalid", not one of the enum's 17 values.mutation-control-invalid-pattern-caen-code.json— setscaenCodeto"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 onlycountryOfResidence, isolating therequiredWhenviolation.mutation-control-missing-conditional-cas-due.json— starts from the standard valid fixture (owesSocialInsuranceContributionCAS: true) and drops onlycasDue, isolating the CAS-worksheetrequiredWhenviolation.mutation-control-invalid-pattern-tax-year.json— setstaxYearto"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.levelisnational— ANAF is Romania's national tax authority.process.typeisfiling, matching the form's own nature as an annual combined self-assessment declaration.process.languageisro: 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.0draftlatestthis pagehas verification recordschema.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.