Registry entry
Finland Form 50A — Earned Income and Deductions
The Finnish Tax Administration's (Vero, Verohallinto) form 3023e, "50A – Earned income and deductions," used to report earned income (wages, salaries, fees, compensation, pensions, and benefits) missing from a taxpayer's pre-completed tax return, or to correct information already on it, together with deductions from earned income, child support paid, international-taxation elections, custody of children living outside Finland, and a permanent separation from a spouse during the tax year. The form's own instructions state that receipts and free-form clarifications must not be enclosed; the Tax Administration will request them separately if needed, so this schema publishes no documents[] entries. It can be filed on paper without any prior authentication, though the Tax Administration's own e-filing channel (MyTax) is the primary route for taxpayers who can authenticate. This document describes the form only; it does not submit anything on the taxpayer's behalf, and does not imply Finnish government endorsement. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Republic of Finland or the Finnish Tax Administration.
Registry entry
fi/vero/50a-earned-income-and-deductions
Authoritative source 3023e, "50A – Earned income and deductions" (VEROH 3023e 1.2025) — Vero's own English-language fillable AcroForm PDF
Machine access
- Schema document
registry/fi/vero/50a-earned-income-and-deductions/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/fi/vero/50a-earned-income-and-deductions/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
92 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
-
fullNamestring requiredThe taxpayer's full name, printed as a repeated header field on every page of the form.
classification: pii -
personalIdentityCodestring requiredThe taxpayer's Finnish personal identity code (henkilötunnus), printed as a repeated header field on every page of the form.
length: 0–20classification: sensitive-pii -
taxYearinteger requiredThe calendar tax year this correction/supplement applies to, printed as a repeated header field on every page of the form.
range: 2000–2100 -
wagesPayorId1string optionalBusiness ID or personal identity code of the first payor of wages, salary, fees, or compensation being reported or corrected.
classification: sensitive-pii -
wagesPayorName1string optionalName of the first payor of wages, salary, fees, or compensation.
-
wagesIncomeType1string optionalFree-text description of the type of income (e.g. cash wages and fringe benefits).
-
wagesGrossIncome1number optionalGross wage/salary/fee/compensation income missing from or to be corrected on the pre-completed tax return. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesWithholdingTax1number optionalWithholding tax on the reported wage/salary/fee/compensation income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesPensionContribution1number optionalStatutory pension insurance contributions withheld by the employer from the reported income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesUnemploymentContribution1number optionalStatutory unemployment insurance contributions withheld from the reported income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesPayorId2string optionalBusiness ID or personal identity code of the second payor of wages, salary, fees, or compensation being reported or corrected.
classification: sensitive-pii -
wagesPayorName2string optionalName of the second payor of wages, salary, fees, or compensation.
-
wagesIncomeType2string optionalFree-text description of the type of income (e.g. cash wages and fringe benefits).
-
wagesGrossIncome2number optionalGross wage/salary/fee/compensation income missing from or to be corrected on the pre-completed tax return. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesWithholdingTax2number optionalWithholding tax on the reported wage/salary/fee/compensation income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesPensionContribution2number optionalStatutory pension insurance contributions withheld by the employer from the reported income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
wagesUnemploymentContribution2number optionalStatutory unemployment insurance contributions withheld from the reported income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
carBenefitReductionPrivateUseboolean optionalWhether the taxpayer claims a reduction in the value of a company car benefit due to private use.
-
carBenefitReductionOtherReasonboolean optionalWhether the taxpayer claims a reduction in the value of a company car benefit for a reason other than private use.
-
carBenefitPrivateUseKmnumber optionalKilometres of private use of the company car supporting the claimed reduction.
range: 0–∞ -
carBenefitWorkRelatedUseKmnumber optionalKilometres of work-related use of the company car supporting the claimed reduction.
range: 0–∞ -
pensionPayorIdstring optionalBusiness ID or personal identity code of the payor of a pension being reported or corrected.
classification: sensitive-pii -
pensionPayorNamestring optionalName of the payor of the reported pension.
-
pensionTypestring optionalFree-text description of the type of pension (e.g. for past employment).
-
pensionGrossIncomenumber optionalGross pension income missing from or to be corrected on the pre-completed tax return. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
pensionWithholdingTaxnumber optionalWithholding tax on the reported pension income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
benefitPayorIdstring optionalBusiness ID or personal identity code of the payor of a benefit (e.g. unemployment allowance or study grant) being reported or corrected.
classification: sensitive-pii -
benefitPayorNamestring optionalName of the payor of the reported benefit.
-
benefitTypestring optionalFree-text description of the type of benefit (e.g. study grant).
-
benefitGrossIncomenumber optionalGross benefit income missing from or to be corrected on the pre-completed tax return. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
benefitWithholdingTaxnumber optionalWithholding tax on the reported benefit income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
otherEarnedIncomeTypestring optionalFree-text description of other earned income missing from the pre-completed tax return.
-
otherEarnedIncomeGrossAmountnumber optionalGross amount of other earned income. The source specimen splits this amount across two adjacent boxes (whole euros, cents); this schema models the combined euro amount as a single decimal value.
range: 0–∞classification: financial -
incomeSpreadingRequestedboolean optionalWhether the taxpayer requests income spreading (averaging non-recurring income over several years).
-
retirementIncomeDeferralAndSpreadingRequestedboolean optionalWhether the taxpayer requests both a deferral of retirement income and income spreading.
-
specialDeductionIllnessboolean optionalWhether the taxpayer claims a special tax deduction for reduced capacity to pay taxes on grounds of illness.
-
specialDeductionIllnessCostnumber optionalCost supporting the illness-based special tax deduction claim.
range: 0–∞classification: financial -
specialDeductionChildDevelopmentalDisorderboolean optionalWhether the taxpayer claims a special tax deduction for reduced capacity to pay taxes on grounds of a child's developmental disorder.
-
specialDeductionChildDevelopmentalDisorderCostnumber optionalCost supporting the child's-developmental-disorder-based special tax deduction claim.
range: 0–∞classification: financial -
specialDeductionOtherReasonboolean optionalWhether the taxpayer claims a special tax deduction for reduced capacity to pay taxes on another ground (e.g. unemployment, child support obligation).
-
specialDeductionOtherReasonCostnumber optionalCost supporting the other-reason-based special tax deduction claim.
range: 0–∞classification: financial -
specialDeductionTotalnumber optionalTotal special tax deduction for reduced capacity to pay taxes, summing the illness, developmental disorder, and other-reason cost amounts.
range: 0–∞classification: financial -
selfEmployedPensionInsuranceContributionnumber optionalStatutory YEL (self-employed) or MYEL (farmers') pension insurance contributions, when not deducted as business expenses.
range: 0–∞classification: financial -
laborOrgMembershipFeesTotalnumber optionalTotal amount of membership fees paid per year to a labour market organisation or unemployment fund, missing from or to be corrected on the pre-completed tax return.
range: 0–∞classification: financial -
laborOrgNamestring optionalName of the labour market organisation or unemployment fund to which the correction applies. Per the form's own instruction, only the name and Business ID of the organisation are entered here, not per-payment detail.
-
laborOrgBusinessIdstring optionalBusiness ID of the labour market organisation or unemployment fund.
-
trainingExpensesnumber optionalTraining expenses incurred in acquiring or maintaining wage income.
range: 0–∞classification: financial -
homeOfficeDeductionnumber optionalHome office deduction, an expense incurred in acquiring or maintaining wage income.
range: 0–∞classification: financial -
workEquipmentExpensesnumber optionalMaterial costs and expenses for using own work equipment, an expense incurred in acquiring or maintaining wage income.
range: 0–∞classification: financial -
businessTripLivingExpensesnumber optionalIncreased living expenses due to business trips, an expense incurred in acquiring or maintaining wage income.
range: 0–∞classification: financial -
otherWageIncomeExpensesnumber optionalOther expenses incurred in acquiring or maintaining wage income, not otherwise itemised.
range: 0–∞classification: financial -
totalWageIncomeExpensesnumber optionalTotal of the training, home office, work equipment, business trip, and other expenses incurred in acquiring or maintaining wage income.
range: 0–∞classification: financial -
nonWageIncomeExpensesnumber optionalExpenses incurred in acquiring or maintaining income other than wages and salary.
range: 0–∞classification: financial -
benefitRelatedExpensesnumber optionalExpenses relating to benefits and other earned income.
range: 0–∞classification: financial -
donationRecipientNamestring optionalName of the recipient of a donation being claimed as a deduction.
-
donationAmountnumber optionalAmount of the donation being claimed as a deduction.
range: 0–∞classification: financial -
repaymentDeductionnumber optionalDeduction claimed for a repayment of previously received income.
range: 0–∞classification: financial -
totalChildSupportPaidnumber optionalTotal child support paid during the tax year, missing from or to be corrected on the pre-completed tax return.
range: 0–∞classification: financial -
childSupportChildPersonalIdentityCode1string optionalFinnish personal identity code of the first child for whom child support is being reported, up to four children.
length: 0–20classification: sensitive-pii -
childSupportChildPersonalIdentityCode2string optionalFinnish personal identity code of the second child for whom child support is being reported, up to four children.
length: 0–20classification: sensitive-pii -
childSupportChildPersonalIdentityCode3string optionalFinnish personal identity code of the third child for whom child support is being reported, up to four children.
length: 0–20classification: sensitive-pii -
childSupportChildPersonalIdentityCode4string optionalFinnish personal identity code of the fourth child for whom child support is being reported, up to four children.
length: 0–20classification: sensitive-pii -
nonResidentUnderTaxTreatyRequestedboolean optionalWhether the taxpayer requests to be considered non-resident under an applicable tax treaty.
-
taxTreatyStudentTeacherResearcherExemptionRequestedboolean optionalWhether the taxpayer requests tax exemption or relief under the students/teachers/researchers article of an applicable tax treaty.
-
limitedTaxLiabilityRequestedboolean optionalWhether the taxpayer requests to be treated as having limited tax liability.
-
a1CertificateHeldboolean optionalWhether the taxpayer holds an A1 certificate (or other corresponding certificate) of applicable social security legislation.
-
taxAtSourceEmploymentPeriod1Startdate optionalStart date of a period of employment supporting a tax-at-source deduction claim, for a non-resident taxpayer who is a leased employee, printed as dd.mm.yyyy on the form (up to four periods).
-
taxAtSourceEmploymentPeriod1Enddate optionalEnd date of the corresponding period of employment supporting a tax-at-source deduction claim.
-
taxAtSourceEmploymentPeriod2Startdate optionalStart date of a period of employment supporting a tax-at-source deduction claim, for a non-resident taxpayer who is a leased employee, printed as dd.mm.yyyy on the form (up to four periods).
-
taxAtSourceEmploymentPeriod2Enddate optionalEnd date of the corresponding period of employment supporting a tax-at-source deduction claim.
-
taxAtSourceEmploymentPeriod3Startdate optionalStart date of a period of employment supporting a tax-at-source deduction claim, for a non-resident taxpayer who is a leased employee, printed as dd.mm.yyyy on the form (up to four periods).
-
taxAtSourceEmploymentPeriod3Enddate optionalEnd date of the corresponding period of employment supporting a tax-at-source deduction claim.
-
taxAtSourceEmploymentPeriod4Startdate optionalStart date of a period of employment supporting a tax-at-source deduction claim, for a non-resident taxpayer who is a leased employee, printed as dd.mm.yyyy on the form (up to four periods).
-
taxAtSourceEmploymentPeriod4Enddate optionalEnd date of the corresponding period of employment supporting a tax-at-source deduction claim.
-
taxAtSourceTotalWorkdaysinteger optionalTotal number of workdays across the reported employment periods, supporting the tax-at-source deduction claim.
range: 0–∞ -
foreignTaxCreditOnFinnishPensionnumber optionalAmount of tax paid abroad on a pension received from Finland, for which a reverse credit is claimed.
range: 0–∞classification: financial -
childOutsideFinlandName1string optionalName of the first child who does not have a Finnish personal identity code, for whom custody outside Finland is being reported. Reportable only if the taxpayer holds a certificate from the child's country of residence proving guardianship.
classification: pii -
childOutsideFinlandDateOfBirth1date optionalDate of birth of the child.
-
childOutsideFinlandCustodyType1enum optionalWhether the taxpayer has joint or sole custody of the child.
enum: joint_custody | sole_custody -
childOutsideFinlandCustodyEndDate1date optionalEnd date of child custody, if custody ended during the tax year.
-
childOutsideFinlandName2string optionalName of the second child who does not have a Finnish personal identity code, for whom custody outside Finland is being reported. Reportable only if the taxpayer holds a certificate from the child's country of residence proving guardianship.
classification: pii -
childOutsideFinlandDateOfBirth2date optionalDate of birth of the child.
-
childOutsideFinlandCustodyType2enum optionalWhether the taxpayer has joint or sole custody of the child.
enum: joint_custody | sole_custody -
childOutsideFinlandCustodyEndDate2date optionalEnd date of child custody, if custody ended during the tax year.
-
childOutsideFinlandName3string optionalName of the third child who does not have a Finnish personal identity code, for whom custody outside Finland is being reported. Reportable only if the taxpayer holds a certificate from the child's country of residence proving guardianship.
classification: pii -
childOutsideFinlandDateOfBirth3date optionalDate of birth of the child.
-
childOutsideFinlandCustodyType3enum optionalWhether the taxpayer has joint or sole custody of the child.
enum: joint_custody | sole_custody -
childOutsideFinlandCustodyEndDate3date optionalEnd date of child custody, if custody ended during the tax year.
-
spouseSeparationDatedate optionalDate the taxpayer and their spouse separated permanently during the tax year, if applicable. The source specimen prints this as a single date field directly following the declarative sentence, rather than as a separate checkbox plus date; presence of a value is what indicates the separation occurred.
-
signatureDatedate optionalDate the form is signed.
-
signaturestring optionalThe taxpayer prints and signs their name by hand; the form must be printed out for this.
classification: pii -
telephoneNumberstring optionalThe taxpayer's telephone number, for the Tax Administration to use if clarification is needed.
classification: pii
Verification record
Candidate selection
This session's brief (GOV-2308, "GovSchema Standard Research") targeted Finland's Taxes vertical directly rather than re-scanning CATALOG.md's "Known Gaps & Opportunities" section from scratch: the candidate — Vero's form 3023e, "50A – Earned income and deductions" — was already named as CATALOG.md's own confirmed-strong Known Gaps item 7, flagged across three prior cycles (GOV-2276, GOV-2292, GOV-2299) as a genuine, live, unauthenticated fillable AcroForm PDF with a specific byte size, page count, and widget count already recorded. No fresh scouting was needed; this cycle picked the candidate up directly.
The GOV-2308 issue title itself describes this as closing "Finland's Taxes vertical (5/6)". This is the vertical count, not the schema's own field/widget figures, so it is disclosed here rather than in the Extraction technique section below: Finland's registry entries prior to this cycle covered exactly 3 of the 6 verticals (Visa, Business Formation, National ID) — CATALOG.md's own GOV-2299 update states this explicitly ("Finland now stands at 3 of 6 verticals ... DMV and Taxes remain open"). Adding Taxes brings Finland to 4 of 6, not 5 — the issue title's "5/6" does not match this document's own arithmetic against CATALOG.md's own prior figures, and is treated as a pre-filing error in the issue text rather than followed. Passport is a separately-confirmed dead end (Finland eliminated paper passport applications in 2006); only DMV remains a genuinely open, unscreened candidate for this jurisdiction.
Source
- URL:
https://www.vero.fi/contentassets/23a6d90331ae408e84959d44a99dc45d/3023ev25_ws.pdf - Fetched fresh this session with a plain HTTP GET: HTTP 200,
233,558bytes — matching the issue's own pre-recorded figure exactly. Confirmed a genuine PDF (%PDF-1.7header), 4 pages, no login/CAPTCHA/ WAF gate anywhere onvero.fi. - Edition: the form's own footer prints "VEROH 3023e 1.2025" on every page — the currently live edition as of this cycle.
- The form is genuinely fillable and submittable on paper without any prior authentication; Vero's e-filing channel (MyTax) is the primary route for taxpayers who can authenticate, but this schema describes the paper/PDF specimen, which stands on its own as a citizen-facing form.
Extraction technique
pdfjs-dist (legacy/build/pdf.mjs v4, installed fresh to a disposable /tmp directory) was used for a two-pass extraction:
- Per-page
getAnnotations({ intent: 'display' }), cross-checked against a second run ofgetAnnotations()with no intent filter (identical result both ways), resolved every/Widgetannotation'sfieldName,fieldType(Tx/Btn),radioButton/checkBoxflags,exportValue,rect, andalternativeText(tooltip): 135 raw widgets across 4 pages (115Tx, 20Btn, 0Ch) resolving to 126 unique field names. This figure matches CATALOG.md's own separately-recorded pre-scout figure ("135 Widget/126 FT fields") exactly. It does not match the GOV-2308 issue text's own stated figure ("127 distinct field names / 141 widgets, 115 Tx + 17 Btn + 0 Ch") — disclosed here rather than silently reconciled. Since this cycle's own count was independently reproduced twice against the exact same freshly-fetched, byte-size-matching PDF (with and without an intent filter), it is treated as authoritative for this schema. 3 of the 126 unique names are page-navigation/utility controls ("Tulosta"/Print, "Sivulle 1"/To first page, "Tyhjenna"/Reset) — excluded as non-data-collecting UI chrome, leaving 123 substantive unique field names across 132 substantive widgets. Unlike this registry'sfi/prhprecedent, these three controls appear only once, clustered at the bottom of page 4, not repeated per page. - Per-page
getTextContent(), clustered into visual lines by y-coordinate, cross-referenced against each widget's ownrect— used to identify the two repeated header widgets ("010", "053") that carry no tooltip on any page: a coordinate cross-reference against page 2's header text confirmed "010" = "Personal identity code" and "053" = "Tax year" (both repeated on every page alongside "020"/"Your name", which does carry its own tooltip). This specimen's remaining AcroForm field names are largely numeric internal keys (e.g. "062", "600;1") with self-documenting EnglishalternativeTexttooltips on almost every substantive widget — only the two header fields above required coordinate decoding.
Every one of the 126 unique widget names was mapped to exactly one fields[] entry via a disposable reconciliation script (/tmp/fi-vero-extract/mapping.mjs, not committed) that asserts zero unmapped widget names — the same exhaustive-accounting discipline established by this registry's fi/migri, fi/prh, and dk/erst cycles. The script confirmed 126/126 widget names mapped, 0 unmapped, consolidating to 92 fields[] entries (cross-checked a second time by diffing the reconciliation script's own key set against the authored schema's fields[].name list: exact match, 0 missing, 0 extra) and 0 documents[] entries (see below).
Field consolidation
- Repeated header widgets ("020"/Your name, "010"/Personal identity code, "053"/Tax year): each is printed once per page (4 widgets sharing one field name) — a single logical field with multiple form-field widgets carrying one shared value, not four separate fields. Modelled as
fullName,personalIdentityCode,taxYear. - Euro/cent amount splits: every monetary amount on this form is printed as two adjacent boxes — a whole-euro box (e.g. "062") and a paired cents box with an
sprefix (e.g. "s062") — 31 such pairs across the form (31s-prefixed widget names in the raw extraction, each matched to exactly one non-sbase widget name; corrected here during independent re-verification from an initially miscounted "32"). Each pair is merged into onenumberfield representing the combined decimal euro amount, per this registry's established split-widget consolidation convention (the same treatmentfi/prhgave its 5-digit TOL industry code). - Two bounded repeating groups, flattened by ordinal suffix per this registry's established convention (matching
dk/cpr'sentrantN/childNprecedent), since the source's own field names already carry a;1/;2/;3suffix:- Wages, salaries, fees and compensation (2 rows) →
wagesPayorId1/wagesPayorId2,wagesPayorName1/2,wagesIncomeType1/2,wagesGrossIncome1/2,wagesWithholdingTax1/2,wagesPensionContribution1/2,wagesUnemploymentContribution1/2(7 fields × 2 rows = 14 fields). - Custody of children outside Finland (3 rows) →
childOutsideFinlandName1-3,childOutsideFinlandDateOfBirth1-3,childOutsideFinlandCustodyType1-3,childOutsideFinlandCustodyEndDate1-3(4 fields × 3 rows = 12 fields). - Pensions and Benefits each have only a single row on this specimen (no
;Nsuffix on their own widget names) and are modelled without any row-numbering suffix accordingly.
- Wages, salaries, fees and compensation (2 rows) →
- Custody-type checkbox pairs ("262;1"/"262;2"/"262;3"): each is two identically-named
Btnwidgets with distinct export values ("Joint custody "/"Sole custody "), not flaggedradioButton: trueat the PDF level (unlike this registry'sfi/dvvprecedent, where the equivalent checkbox groups genuinely were PDF radio fields) — but functionally a two-way mutually-exclusive choice given the shared field name. Modelled as oneenumfield per row (childOutsideFinlandCustodyType1-3, valuesjoint_custody/sole_custody), the same checkbox-group-to-enum consolidationfi/prhused for its multi-way groups, disclosed here since the PDF-level radio flag itself is absent. - Disclosed source naming quirks (not modelling artifacts):
- The four child-support child-identity-code widgets are named inconsistently in the source's own AcroForm: the first is
"086,1"(a comma) while the remaining three are"086;2","086;3","086;4"(semicolons). All four are flattened identically tochildSupportChildPersonalIdentityCode1-4; the comma/semicolon inconsistency is a source artifact, disclosed rather than treated as a fourth, differently-structured field. - The "crediting of tax paid abroad on a pension" widget's own raw field name is the bare digit
"1"(with cents companion"s1") — a name with no semantic connection to its own tooltip, which fully describes the field ("I have paid tax abroad on a pension I have received from Finland..."). Modelled asforeignTaxCreditOnFinnishPensionper the tooltip, not the field name. - The spousal-separation widget ("246") is a text (
Tx) box directly beneath the sentence "My spouse and I have separated permanently during the tax year," not a checkbox paired with a separate date box. Modelled as a single optionaldatefield (spouseSeparationDate) whose presence itself signals that the separation occurred, since the source provides only the one widget, not a boolean-plus-date pair.
- The four child-support child-identity-code widgets are named inconsistently in the source's own AcroForm: the first is
Judgment calls and disclosed quirks
- No
documents[]entries: the form's own instructional text states verbatim, "Do not enclose any receipts or free-form clarifications with the form; place them somewhere for safekeeping. The Tax Administration will ask you for the receipts, if necessary." This is a structural fact about the source form, not an oversight — disclosed explicitly given this registry's own prior history of conformance checkers silently missing adocuments[]blind spot on schemas that do have supporting- document requirements. This schema has genuinely none. - Amount representation: unlike some other Nordic income-tax schemas in this registry (e.g.
dk/skattestyrelsen, whose source form prints one box per amount and is modelled as a singlenumberfield), this specimen's amounts are genuinely split across two boxes each; the resulting single-number-field shape looks identical, but the consolidation step is a real structural collapse here, not a no-op — disclosed for that reason. - Car-benefit-reduction km fields: the two reason checkboxes (
carBenefitReductionPrivateUse,carBenefitReductionOtherReason) are followed by two km fields ("Private use (km)", "Work-related use (km)") that the source's own layout does not clearly gate to one checkbox specifically. Left ungated (norequiredWhen) rather than inventing an unstated one-to-one correspondence. taxYearmodelled asintegerwith aminimum/maximum(2000/ 2100) sanity range rather than a strict pattern, per this registry'see/emta/income-tax-return-form-aprecedent for the same field name.crossFieldValidation: fourcomparerules (greaterThanOrEqual) confirm each of the four tax-at-source employment periods' end date is not before its own start date. Both fields in each pair are optional; per this registry's established convention (e.g.ae/fta/vat- registration's license-date compare rule on an equally optional pair), the comparison is only meaningful — and only checked by a conforming consumer — when both sides of a given pair are actually present.- Widget/field-count discrepancy (see Extraction technique above): this cycle's own fresh, twice-reproduced
pdfjs-distcount (135 widgets / 126 unique names / 115 Tx + 20 Btn) does not exactly match the GOV-2308 issue text's stated figure (141 widgets / 127 distinct names / 115 Tx + 17 Btn), though it matches CATALOG.md's own separately -recorded pre-scout figure ("135 Widget/126 FT fields") exactly. This schema is built from, and its numbers throughout this document refer to, this cycle's own independently-reproduced extraction.
Mock conformance run
Two scenarios were built and checked against this schema's own required/requiredWhen/crossFieldValidation grammar with a from-scratch interpreter script (/tmp/fi-vero-extract/conformance- check.mjs, not committed — walks fields[] and crossFieldValidation[] directly against a candidate data object, rather than reusing any prior cycle's own checker):
single-payor-minimal-required-only.json— a taxpayer filling only the 3 statically-required: trueheader fields (fullName,personalIdentityCode,taxYear), with no other section completed. 0 errors.full-coverage-multi-income-and-deductions.json— a taxpayer with two wages payors, a reduced car benefit, a pension, a benefit, other earned income, income spreading, all three special-tax-deduction grounds (each with its conditionally-required cost), a YEL contribution, a labour-organisation fee, all five wage-income expenses, both non-wage-income expense lines, a donation, a repayment deduction, child support for two children, a full set of international-situation elections (non-resident tax treaty request, A1 certificate, two tax-at-source employment periods, total workdays, a foreign pension tax credit), two children with custody outside Finland (one joint, one sole custody), a permanent spousal separation date, and the signature block — exercising all threerequiredWhen-gated cost fields and all fourcrossFieldValidationcompare rules. 0 errors.
5 mutation controls, each expected to raise exactly 1 error, all confirmed:
- Dropping
fullName(statically required) from scenario 1 → 1 error (MISSING REQUIRED FIELD: fullName). - Dropping
taxYear(statically required) from scenario 1 → 1 error (MISSING REQUIRED FIELD: taxYear). - Setting
specialDeductionIllness: truewhile omittingspecialDeductionIllnessCostin scenario 2 → 1 error (MISSING REQUIRED FIELD: specialDeductionIllnessCost). - Setting
specialDeductionChildDevelopmentalDisorder: truewhile omittingspecialDeductionChildDevelopmentalDisorderCostin scenario 2 → 1 error (MISSING REQUIRED FIELD: specialDeductionChildDevelopmentalDisorderCost). - Reversing
taxAtSourceEmploymentPeriod1Start/...1Endin scenario 2 (end date set before start date) → 1 error (CROSS-FIELD VIOLATION: taxAtSourceEmploymentPeriod1EndNotBeforeStart).
The checker script additionally walks every visibleWhen/requiredWhen/ crossFieldValidation field reference in the document and confirms each resolves to a real fields[] entry (0 dangling references).
Validation
node tools/validate.mjs registry/fi/vero/50a-earned-income-and-deductions/1.0.0/schema.json and node tools/validate-ajv.mjs (same path) both pass individually and as part of a full-registry run from a clean checkout of this branch.
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 Verohallinto (Finnish Tax Administration) or any government. The authoritative source is always the live government form and its official instructions.