{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/anytax/json-schema/anytax-current-question-dto-schema.json",
  "title": "CurrentQuestionDto",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/anytax-openapi.json#/components/schemas/CurrentQuestionDto",
  "type": "object",
  "properties": {
    "uuid": {
      "type": "string",
      "format": "uuid",
      "description": "Use this UUID when submitting answers"
    },
    "name": {
      "description": "Short label for the question (used in nav and summaries)",
      "allOf": [
        {
          "$ref": "#/$defs/TranslationDto"
        }
      ]
    },
    "display": {
      "description": "Full question text, subtitle, and tooltip for rendering",
      "allOf": [
        {
          "$ref": "#/$defs/QuestionDisplay"
        }
      ]
    },
    "input": {
      "oneOf": [
        {
          "$ref": "#/$defs/BinaryInput"
        },
        {
          "$ref": "#/$defs/ChoiceInput"
        },
        {
          "$ref": "#/$defs/MultiSelectInput"
        },
        {
          "$ref": "#/$defs/TextInput"
        },
        {
          "$ref": "#/$defs/NumberInput"
        },
        {
          "$ref": "#/$defs/AmountInput"
        },
        {
          "$ref": "#/$defs/DateInput"
        },
        {
          "$ref": "#/$defs/DateRangeInput"
        },
        {
          "$ref": "#/$defs/AddressInput"
        },
        {
          "$ref": "#/$defs/DistanceGeoInput"
        },
        {
          "$ref": "#/$defs/InfoInput"
        },
        {
          "$ref": "#/$defs/DropdownInput"
        },
        {
          "$ref": "#/$defs/WageTaxInput"
        },
        {
          "$ref": "#/$defs/CapitalIncomeInput"
        },
        {
          "$ref": "#/$defs/EurInput"
        },
        {
          "$ref": "#/$defs/InstancesInput"
        },
        {
          "$ref": "#/$defs/AddAnotherInput"
        }
      ]
    },
    "answer": {
      "oneOf": [
        {
          "$ref": "#/$defs/TextAnswerDto"
        },
        {
          "$ref": "#/$defs/BinaryAnswerResponseDto"
        },
        {
          "$ref": "#/$defs/DateAnswerDto"
        },
        {
          "$ref": "#/$defs/DateRangeAnswerDto"
        },
        {
          "$ref": "#/$defs/NumberAnswerDto"
        },
        {
          "$ref": "#/$defs/AmountAnswerDto"
        },
        {
          "$ref": "#/$defs/ChoiceAnswerResponseDto"
        },
        {
          "$ref": "#/$defs/MultiSelectAnswerResponseDto"
        },
        {
          "$ref": "#/$defs/AddressAnswerDto"
        },
        {
          "$ref": "#/$defs/DistanceGeoAnswerDto"
        },
        {
          "$ref": "#/$defs/WageTaxAnswer2024Dto"
        },
        {
          "$ref": "#/$defs/WageTaxAnswer2025Dto"
        },
        {
          "$ref": "#/$defs/CapitalIncomeAnswerDto"
        },
        {
          "$ref": "#/$defs/EurAnswerDto"
        },
        {
          "$ref": "#/$defs/InstancesAnswerDto"
        },
        {
          "$ref": "#/$defs/AddAnotherAnswerDto"
        },
        {
          "$ref": "#/$defs/InfoAnswerDto"
        },
        {
          "$ref": "#/$defs/DropdownAnswerDto"
        },
        {
          "$ref": "#/$defs/EmptyAnswerDto"
        }
      ]
    },
    "status": {
      "$ref": "#/$defs/QuestionStatus"
    },
    "validation": {
      "$ref": "#/$defs/ValidationMessages"
    },
    "isCategoryQuestion": {
      "type": "boolean",
      "description": "True for root-type rules that render as category headers, not answerable questions"
    },
    "navigation": {
      "description": "Section and subsection this question belongs to",
      "allOf": [
        {
          "$ref": "#/$defs/QuestionNavigation"
        }
      ]
    }
  },
  "required": [
    "uuid",
    "name",
    "display",
    "input",
    "answer",
    "status",
    "isCategoryQuestion",
    "navigation"
  ],
  "$defs": {
    "AddAnotherAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "addAnother"
          ],
          "description": "Result of the \"add another?\" prompt"
        },
        "added": {
          "type": "boolean",
          "description": "Whether the user chose to add another instance"
        }
      },
      "required": [
        "type",
        "added"
      ]
    },
    "AddAnotherInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "addAnother"
          ],
          "description": "Yes/No prompt asking \"add another instance?\" Render two buttons. If user says yes, call POST /answer/{filing}/{question}/one-more."
        }
      },
      "required": [
        "type"
      ]
    },
    "AddressAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address"
          ]
        },
        "address": {
          "$ref": "#/$defs/AddressValueDto"
        },
        "geoPlaceAddress": {
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": true,
          "description": "Raw geocoding result as originally stored"
        }
      },
      "required": [
        "type",
        "address",
        "geoPlaceAddress"
      ]
    },
    "AddressInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address"
          ]
        }
      },
      "required": [
        "type"
      ]
    },
    "AddressValueDto": {
      "type": "object",
      "properties": {
        "street": {
          "type": "string",
          "maxLength": 25,
          "description": "Street name. ISO-8859-15 / ELSTER characters only."
        },
        "houseNumber": {
          "type": "string",
          "maxLength": 9
        },
        "houseNumberSuffix": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 6,
          "description": "House number suffix (e.g. 'a'). ISO-8859-15 / ELSTER characters only."
        },
        "zipCode": {
          "type": "string",
          "maxLength": 10
        },
        "city": {
          "type": "string",
          "maxLength": 25,
          "description": "City. ISO-8859-15 / ELSTER characters only."
        },
        "state": {
          "type": "string",
          "maxLength": 25,
          "description": "State / region. ISO-8859-15 / ELSTER characters only."
        },
        "country": {
          "type": "string",
          "maxLength": 25,
          "description": "Country. ISO-8859-15 / ELSTER characters only."
        },
        "countryCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "Country code from GET /api/v1/countries. Optional: an address sent with only `country` still works and is matched to a code where the name is recognised. Either way the stored `country` is replaced by the official German name for that code, which is what is filed."
        },
        "extraInfo": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 30,
          "description": "Optional address line (c/o, apt, …). ISO-8859-15 / ELSTER characters only."
        }
      },
      "required": [
        "street",
        "houseNumber",
        "houseNumberSuffix",
        "zipCode",
        "city",
        "state",
        "country",
        "extraInfo"
      ]
    },
    "AmountAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "amount"
          ],
          "description": "Monetary value. Same shape as number but with currency semantics."
        },
        "number": {
          "type": "number",
          "description": "Non-negative whole number, if another validation is not specified (min, max or regexp)"
        }
      },
      "required": [
        "type",
        "number"
      ]
    },
    "AmountInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "amount"
          ],
          "description": "Monetary input. Render with currency symbol."
        },
        "placeholder": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        },
        "validation": {
          "$ref": "#/$defs/NumberValidation"
        }
      },
      "required": [
        "type",
        "placeholder"
      ]
    },
    "BinaryAnswerResponseDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "binary"
          ]
        },
        "selected": {
          "type": "boolean"
        }
      },
      "required": [
        "type",
        "selected"
      ]
    },
    "BinaryInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "binary"
          ]
        },
        "validation": {
          "$ref": "#/$defs/BinaryInputValidation"
        }
      },
      "required": [
        "type",
        "validation"
      ]
    },
    "BinaryInputValidation": {
      "type": "object",
      "properties": {
        "yes": {
          "description": "Submit this UUID when user selects Yes",
          "allOf": [
            {
              "$ref": "#/$defs/BinaryOptionDto"
            }
          ]
        },
        "no": {
          "description": "Submit this UUID when user selects No",
          "allOf": [
            {
              "$ref": "#/$defs/BinaryOptionDto"
            }
          ]
        }
      },
      "required": [
        "yes",
        "no"
      ]
    },
    "BinaryOptionDto": {
      "type": "object",
      "properties": {
        "uuid": {
          "type": "string",
          "format": "uuid"
        }
      },
      "required": [
        "uuid"
      ]
    },
    "CapitalIncomeAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "capitalIncome"
          ]
        },
        "totalCapitalIncome": {
          "type": "number",
          "description": "Line 7 — Capital gains (total)."
        },
        "gainsFromShareSales": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 8 — Gains from share sales."
        },
        "optionPremiumsAndForwardGains": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 9 — Option premiums and forward-transaction gains."
        },
        "protectedOldSharesGains": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 10 — Gains from grandfathered shares (§ 56 InvStG)."
        },
        "previousYearsAllowance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 10a — Previous years' allowance (Vorabpauschale)."
        },
        "substituteAssessmentBasis": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 11 — Substitute assessment basis."
        },
        "nonCompensatedLoss": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 12 — Uncompensated losses (excl. share sales)."
        },
        "nonCompensatedLossShares": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 13 — Uncompensated losses from share sales."
        },
        "forwardTransactionLoss": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 14 — Losses from futures trading."
        },
        "specialLosses": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 15 — Special losses (irrecoverable capital claims etc.)."
        },
        "saversLumpSumUsed": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 16 — Savings allowance used (Sparer-Pauschbetrag); 0 is valid."
        },
        "capitalGainsTax": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 37 — Capital gains tax."
        },
        "solidaritySurcharge": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 38 — Solidarity surcharge."
        },
        "churchTaxOnCapitalGains": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 39 — Church tax on capital gains tax."
        },
        "foreignTaxesCredited": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 40 — Credited foreign withholding tax. Optional negative sign."
        },
        "foreignTaxCreditableNotCredited": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 41 — Creditable but not-yet-credited foreign tax. Optional negative sign."
        },
        "fictitiousForeignWithholding": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 42 — Fictitious foreign withholding tax."
        }
      },
      "required": [
        "type",
        "totalCapitalIncome"
      ]
    },
    "CapitalIncomeInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "capitalIncome"
          ],
          "description": "Structured form for a Kapitalertragsbescheinigung (capital income certificate)."
        }
      },
      "required": [
        "type"
      ]
    },
    "ChoiceAnswerResponseDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "choice"
          ]
        },
        "selected": {
          "$ref": "#/$defs/SelectedOptionDto"
        }
      },
      "required": [
        "type",
        "selected"
      ]
    },
    "ChoiceInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "choice"
          ]
        },
        "options": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/OptionItem"
          }
        }
      },
      "required": [
        "type",
        "options"
      ]
    },
    "DateAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "date"
          ]
        },
        "date": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "date"
      ]
    },
    "DateInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "date"
          ],
          "description": "Single date picker. For date ranges, see DateRangeInput."
        },
        "validation": {
          "$ref": "#/$defs/DatePickerValidation"
        }
      },
      "required": [
        "type",
        "validation"
      ]
    },
    "DatePickerValidation": {
      "type": "object",
      "properties": {
        "validationMode": {
          "type": "string",
          "description": "Validation mode for incorrect values (e.g., \"error\", \"warning\")"
        },
        "dateLimitMin": {
          "type": "string",
          "format": "date",
          "description": "Earliest selectable date."
        },
        "dateLimitMax": {
          "type": "string",
          "format": "date",
          "description": "Latest selectable date."
        }
      }
    },
    "DateRangeAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dateRange"
          ]
        },
        "start": {
          "type": "string",
          "format": "date"
        },
        "end": {
          "type": "string",
          "format": "date"
        }
      },
      "required": [
        "type",
        "start",
        "end"
      ]
    },
    "DateRangeInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dateRange"
          ],
          "description": "Date range picker (start + end)."
        },
        "validation": {
          "$ref": "#/$defs/DatePickerValidation"
        }
      },
      "required": [
        "type",
        "validation"
      ]
    },
    "DistanceGeoAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "distanceGeo"
          ]
        },
        "distance": {
          "type": "number",
          "description": "Distance in km"
        },
        "from": {
          "$ref": "#/$defs/GeoLocationDto"
        },
        "to": {
          "$ref": "#/$defs/GeoLocationDto"
        }
      },
      "required": [
        "type",
        "distance",
        "from",
        "to"
      ]
    },
    "DistanceGeoInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "distanceGeo"
          ],
          "description": "Two addresses + distance between them."
        }
      },
      "required": [
        "type"
      ]
    },
    "DropdownAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dropdown"
          ],
          "description": "Single selection from a dropdown list"
        },
        "selectedValue": {
          "type": "string",
          "description": "The value of the chosen option. Must match one of input.options[].value."
        }
      },
      "required": [
        "type",
        "selectedValue"
      ]
    },
    "DropdownInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dropdown"
          ],
          "description": "Single-select from a list of options. Render as a searchable dropdown/combobox. Can have 100+ options. Submit the selected option's value field as { type: \"dropdown\", selectedValue: \"...\" }."
        },
        "options": {
          "description": "The options, in display order.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/DropdownOptionItem"
          }
        }
      },
      "required": [
        "type",
        "options"
      ]
    },
    "DropdownOptionItem": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique ID for this option"
        },
        "label": {
          "description": "Label shown to the user, in English and German",
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        },
        "value": {
          "type": "string",
          "description": "The value to send back when the user picks this option."
        }
      },
      "required": [
        "id",
        "label",
        "value"
      ]
    },
    "EmptyAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "empty"
          ],
          "description": "No value. Appears for unanswered questions."
        }
      },
      "required": [
        "type"
      ]
    },
    "EurAddressDto": {
      "type": "object",
      "properties": {
        "street": {
          "type": "string",
          "maxLength": 25
        },
        "houseNumber": {
          "type": "string",
          "maxLength": 9
        },
        "houseNumberSuffix": {
          "type": "string",
          "maxLength": 6
        },
        "zipCode": {
          "type": "string",
          "maxLength": 10
        },
        "city": {
          "type": "string",
          "maxLength": 25
        },
        "country": {
          "type": "string",
          "maxLength": 56
        },
        "countryCode": {
          "type": "string",
          "maxLength": 3
        },
        "state": {
          "type": "string",
          "maxLength": 25
        },
        "extraInfo": {
          "type": "string",
          "maxLength": 999
        }
      }
    },
    "EurAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "eur"
          ]
        },
        "status": {
          "type": "string",
          "enum": [
            "draft",
            "complete"
          ],
          "description": "`complete` is only accepted once every year-end allowance is answered."
        },
        "business": {
          "$ref": "#/$defs/EurBusinessDto"
        },
        "kleinunternehmer": {
          "type": "boolean",
          "description": "Kleinunternehmer (§19 UStG): no VAT fields are used."
        },
        "amounts": {
          "type": "object",
          "additionalProperties": {
            "type": "number"
          },
          "description": "Euro amounts keyed by EÜR field name (e.g. `exp_telecom`)."
        },
        "vatCharged": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "inc_rental",
              "inc_tax_exempt"
            ]
          }
        },
        "commute": {
          "$ref": "#/$defs/EurCommuteDto"
        },
        "vehicleMethod": {
          "type": "string",
          "enum": [
            "one_percent",
            "logbook"
          ]
        },
        "vehicles": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EurVehicleYearDto"
          }
        },
        "homeOffice": {
          "$ref": "#/$defs/EurHomeOfficeDto"
        },
        "goodsTaken": {
          "$ref": "#/$defs/EurGoodsTakenDto"
        },
        "sections": {
          "$ref": "#/$defs/EurSectionsDto"
        },
        "assetsMode": {
          "type": "string",
          "enum": [
            "items",
            "totals"
          ],
          "description": "`totals`: software, office and other equipment are entered as yearly group totals in `assetTotals`; vehicles stay in `assets`."
        },
        "assetTotals": {
          "description": "Business share only. `special7g` is ignored for `intangible`.",
          "allOf": [
            {
              "$ref": "#/$defs/EurAssetTotalsByGroupDto"
            }
          ]
        },
        "assetSaleProceeds": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99,
          "description": "Net sale price of items sold (totals mode)."
        },
        "assets": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EurAssetDto"
          }
        },
        "trips": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EurTripDto"
          }
        },
        "privateTrips": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EurPrivateTripDto"
          }
        },
        "gifts": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/EurGiftDto"
          }
        },
        "entertainmentOtherReason": {
          "type": "string",
          "maxLength": 999
        }
      },
      "required": [
        "type",
        "status",
        "business",
        "kleinunternehmer",
        "amounts"
      ]
    },
    "EurAssetDto": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 64,
          "description": "Unique within the block; any string."
        },
        "equipmentClass": {
          "type": "string",
          "enum": [
            "computer_hardware",
            "software_licences",
            "mobile_phone",
            "photo_video_audio",
            "office_furniture",
            "office_machines",
            "vehicle_car",
            "vehicle_motorcycle",
            "bicycle",
            "tools_equipment",
            "other"
          ]
        },
        "origin": {
          "type": "string",
          "enum": [
            "new",
            "owned",
            "leased"
          ]
        },
        "description": {
          "type": "string",
          "maxLength": 999
        },
        "purchaseDate": {
          "type": "string",
          "format": "date"
        },
        "cost": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "usefulLifeYears": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "businessPct": {
          "type": "number",
          "minimum": 1,
          "maximum": 100
        },
        "bookValueStart": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "special7g": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99,
          "description": "§7g special depreciation claimed this year."
        },
        "special7gEarlier": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99,
          "description": "§7g special depreciation claimed in earlier years."
        },
        "listPrice": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99,
          "description": "Gross list price (vehicles)."
        },
        "propulsion": {
          "type": "string",
          "enum": [
            "combustion",
            "electric",
            "plug_in_hybrid"
          ]
        },
        "disposal": {
          "type": "string",
          "enum": [
            "sold",
            "withdrawn",
            "scrapped",
            "lost"
          ]
        },
        "disposalDate": {
          "type": "string",
          "format": "date"
        },
        "disposalProceeds": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        }
      },
      "required": [
        "id",
        "equipmentClass"
      ]
    },
    "EurAssetTotalsByGroupDto": {
      "type": "object",
      "properties": {
        "intangible": {
          "$ref": "#/$defs/EurAssetTotalsDto"
        },
        "office": {
          "$ref": "#/$defs/EurAssetTotalsDto"
        },
        "other": {
          "$ref": "#/$defs/EurAssetTotalsDto"
        }
      }
    },
    "EurAssetTotalsDto": {
      "type": "object",
      "properties": {
        "cost": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "bvStart": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "additions": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "special7g": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "afa": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "disposals": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        }
      }
    },
    "EurBusinessDto": {
      "type": "object",
      "properties": {
        "taxNumber": {
          "type": "string",
          "maxLength": 20
        },
        "name": {
          "type": "string",
          "maxLength": 999
        },
        "address": {
          "$ref": "#/$defs/EurAddressDto"
        },
        "businessId": {
          "type": "string",
          "maxLength": 17,
          "description": "Wirtschafts-Identifikationsnummer, e.g. `DE123456788-00001`."
        },
        "activity": {
          "type": "string",
          "maxLength": 999
        },
        "kind": {
          "type": "string",
          "enum": [
            "trade",
            "freelancer",
            "other_self_employed"
          ],
          "description": "Legal form of the business."
        },
        "owner": {
          "type": "string",
          "enum": [
            "person_a",
            "person_b",
            "both"
          ],
          "description": "Who runs the business in a joint filing."
        },
        "closed": {
          "type": "string",
          "enum": [
            "no",
            "sold",
            "transferred_free"
          ]
        },
        "closureAdjustment": {
          "type": "number",
          "description": "Gain (positive) or loss (negative) from closing the business."
        },
        "propertyWithdrawn": {
          "type": "boolean"
        }
      }
    },
    "EurCommuteDto": {
      "type": "object",
      "properties": {
        "declaredNone": {
          "type": "boolean",
          "description": "No commute between home and business premises."
        },
        "oneWayKm": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000
        },
        "days": {
          "type": "integer",
          "minimum": 0,
          "maximum": 366
        },
        "months": {
          "description": "Months 1–12.",
          "type": "array",
          "items": {
            "type": "number"
          }
        }
      }
    },
    "EurGiftDto": {
      "type": "object",
      "properties": {
        "recipient": {
          "type": "string",
          "maxLength": 200
        },
        "amount": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        }
      }
    },
    "EurGoodsLineDto": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string",
          "maxLength": 999
        },
        "amount": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        }
      }
    },
    "EurGoodsTakenDto": {
      "type": "object",
      "properties": {
        "answer": {
          "type": "string",
          "enum": [
            "yes",
            "no"
          ]
        },
        "lines": {
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/EurGoodsLineDto"
          }
        }
      }
    },
    "EurHomeOfficeDto": {
      "type": "object",
      "properties": {
        "answer": {
          "type": "string",
          "enum": [
            "yes",
            "no"
          ]
        },
        "room": {
          "type": "string",
          "enum": [
            "all",
            "part",
            "no"
          ]
        },
        "roomMonths": {
          "description": "Months 1–12.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "otherWorkplace": {
          "type": "string",
          "enum": [
            "yes",
            "no"
          ]
        },
        "daysYear": {
          "type": "integer",
          "minimum": 0,
          "maximum": 366
        },
        "daysOtherMonths": {
          "type": "integer",
          "minimum": 0,
          "maximum": 366
        },
        "daysRoomMonths": {
          "type": "integer",
          "minimum": 0,
          "maximum": 366
        },
        "roomCosts": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "method": {
          "type": "string",
          "enum": [
            "actual",
            "flat",
            "daily"
          ]
        },
        "secondHomeConfirmed": {
          "type": "boolean"
        }
      }
    },
    "EurInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "eur"
          ],
          "description": "Structured two-screen form for Anlage EÜR + AVEÜR (one business). Submit `EurAnswerDto`; calculated values come from POST /api/v1/eur/{filingUUID}/preview."
        },
        "taxYear": {
          "type": "number",
          "description": "Scenario tax year for this filing."
        }
      },
      "required": [
        "type",
        "taxYear"
      ]
    },
    "EurPrivateTripDto": {
      "type": "object",
      "properties": {
        "vehicleType": {
          "type": "string",
          "enum": [
            "car",
            "other_motorised"
          ]
        },
        "km": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000
        }
      },
      "required": [
        "vehicleType"
      ]
    },
    "EurSectionsDto": {
      "type": "object",
      "properties": {
        "assets": {
          "type": "boolean"
        },
        "trips": {
          "type": "boolean"
        },
        "privateTrips": {
          "type": "boolean"
        },
        "gifts": {
          "type": "boolean"
        },
        "meals": {
          "type": "boolean"
        },
        "privateMoney": {
          "type": "boolean"
        }
      }
    },
    "EurTripDto": {
      "type": "object",
      "properties": {
        "countryEn": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 120
        },
        "cityEn": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 120
        },
        "fullDays": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100000
        },
        "partialDays": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100000
        }
      }
    },
    "EurVehicleYearDto": {
      "type": "object",
      "properties": {
        "assetId": {
          "type": "string",
          "maxLength": 64,
          "description": "`id` of the vehicle in `assets`."
        },
        "businessPct": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "privateUseMonths": {
          "type": "integer",
          "minimum": 0,
          "maximum": 12
        },
        "totalKm": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000
        },
        "businessKm": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000
        },
        "commuteKm": {
          "type": "number",
          "minimum": 0,
          "maximum": 1000000
        },
        "leasing": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "taxInsurance": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        },
        "operating": {
          "type": "number",
          "minimum": 0,
          "maximum": 999999999999.99
        }
      },
      "required": [
        "assetId"
      ]
    },
    "GeoLocationDto": {
      "type": "object",
      "properties": {
        "lat": {
          "type": [
            "number",
            "null"
          ]
        },
        "lng": {
          "type": [
            "number",
            "null"
          ]
        },
        "address": {
          "$ref": "#/$defs/AddressValueDto"
        },
        "geoPlaceAddress": {
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": true,
          "description": "Raw geocoding result as originally stored"
        }
      },
      "required": [
        "lat",
        "lng",
        "address",
        "geoPlaceAddress"
      ]
    },
    "InfoAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "info"
          ],
          "description": "Info screen the user has seen"
        },
        "acknowledged": {
          "type": "boolean"
        }
      },
      "required": [
        "type",
        "acknowledged"
      ]
    },
    "InfoInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "info"
          ],
          "description": "Info screen. Render display.text. If continuable is true, show a Continue button and submit { type: \"info\", acknowledged: true }. If false, only show Back. The user cannot go forward."
        },
        "validation": {
          "$ref": "#/$defs/InfoInputValidation"
        }
      },
      "required": [
        "type",
        "validation"
      ]
    },
    "InfoInputValidation": {
      "type": "object",
      "properties": {
        "continuable": {
          "type": "boolean",
          "description": "When true, user can continue forward. When false, user can only go back."
        }
      },
      "required": [
        "continuable"
      ]
    },
    "InstancesAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "instances"
          ]
        },
        "value": {
          "type": "number",
          "description": "Current number of instances"
        }
      },
      "required": [
        "type",
        "value"
      ]
    },
    "InstancesInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "instances"
          ],
          "description": "Numeric input for \"how many instances?\""
        }
      },
      "required": [
        "type"
      ]
    },
    "MultiSelectAnswerResponseDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "multiSelect"
          ]
        },
        "selected": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/SelectedOptionDto"
          }
        }
      },
      "required": [
        "type",
        "selected"
      ]
    },
    "MultiSelectInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "multiSelect"
          ]
        },
        "options": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/OptionItem"
          }
        },
        "validation": {
          "$ref": "#/$defs/MultiSelectValidation"
        }
      },
      "required": [
        "type",
        "options"
      ]
    },
    "MultiSelectValidation": {
      "type": "object",
      "properties": {
        "noneOption": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid",
          "description": "\"None of the above\" option UUID"
        }
      },
      "required": [
        "noneOption"
      ]
    },
    "NavigationItem": {
      "type": "object",
      "properties": {
        "uuid": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "$ref": "#/$defs/TranslationDto"
        }
      },
      "required": [
        "uuid",
        "name"
      ]
    },
    "NumberAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "number"
          ]
        },
        "number": {
          "type": "number",
          "description": "Non-negative whole number, if another validation is not specified (min, max or regexp)"
        }
      },
      "required": [
        "type",
        "number"
      ]
    },
    "NumberInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "number"
          ]
        },
        "placeholder": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        },
        "validation": {
          "$ref": "#/$defs/NumberValidation"
        }
      },
      "required": [
        "type",
        "placeholder"
      ]
    },
    "NumberValidation": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "description": "Minimum allowed value (inclusive)"
        },
        "max": {
          "type": "number",
          "description": "Maximum allowed value (inclusive)"
        },
        "validationRegex": {
          "type": "string",
          "description": "Validation regex pattern for allowed values eg: [0-9]"
        },
        "isPercentage": {
          "type": "boolean",
          "description": "Whether the number is a percentage"
        },
        "validationMode": {
          "type": "string",
          "description": "Validation mode for incorrect values (e.g., \"error\", \"warning\")"
        }
      }
    },
    "OptionItem": {
      "type": "object",
      "properties": {
        "uuid": {
          "type": "string",
          "format": "uuid"
        },
        "label": {
          "$ref": "#/$defs/TranslationDto"
        }
      },
      "required": [
        "uuid",
        "label"
      ]
    },
    "QuestionDisplay": {
      "type": "object",
      "properties": {
        "text": {
          "$ref": "#/$defs/TranslationDto"
        },
        "subtitle": {
          "$ref": "#/$defs/TranslationDto"
        },
        "tooltip": {
          "$ref": "#/$defs/TranslationDto"
        }
      },
      "required": [
        "text",
        "subtitle",
        "tooltip"
      ]
    },
    "QuestionNavigation": {
      "type": "object",
      "properties": {
        "section": {
          "$ref": "#/$defs/NavigationItem"
        },
        "subsection": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/NavigationItem"
            }
          ]
        }
      },
      "required": [
        "section",
        "subsection"
      ]
    },
    "QuestionStatus": {
      "type": "object",
      "properties": {
        "answered": {
          "type": "boolean",
          "description": "User has submitted a value for this question"
        },
        "complete": {
          "type": "boolean",
          "description": "Question needs no further attention (answered or auto-resolved)"
        },
        "prefilledFromYear": {
          "type": "string",
          "description": "Tax year this answer was pre-filled from (e.g. `y2025`). Present only while the answer is pre-filled and not yet confirmed; cleared once the user confirms or edits."
        },
        "prefilledFromPartner": {
          "type": "string",
          "description": "Slug of the partner whose prefill populated this answer. Present only while pre-filled and not yet confirmed; cleared once the user confirms or edits. Mutually exclusive with `prefilledFromYear`."
        },
        "prefilledFromElster": {
          "type": "boolean",
          "description": "True while the answer holds a value imported from ELSTER that the user has not confirmed yet; drives the \"Pre-filled from ELSTER\" label. Mutually exclusive with `prefilledFromYear` and `prefilledFromPartner`."
        }
      },
      "required": [
        "answered",
        "complete"
      ]
    },
    "SelectedOptionDto": {
      "type": "object",
      "properties": {
        "uuid": {
          "type": "string"
        },
        "label": {
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        }
      },
      "required": [
        "uuid",
        "label"
      ]
    },
    "TextAnswerDto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "text"
          ]
        },
        "text": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "text"
      ]
    },
    "TextInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "text"
          ]
        },
        "placeholder": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        },
        "validation": {
          "$ref": "#/$defs/TextValidation"
        }
      },
      "required": [
        "type",
        "placeholder"
      ]
    },
    "TextValidation": {
      "type": "object",
      "properties": {
        "validationPreset": {
          "type": "string",
          "enum": [
            "iban",
            "bic",
            "taxId",
            "taxNumber"
          ],
          "description": "Validation preset eg: iban, bic, taxId, taxNumber"
        },
        "pattern": {
          "type": "string",
          "description": "Regex pattern for custom validation"
        },
        "min": {
          "type": "number",
          "description": "Minimum allowed value (inclusive)"
        },
        "max": {
          "type": "number",
          "description": "Maximum allowed value (inclusive)"
        },
        "validationMode": {
          "type": "string",
          "description": "Validation mode for incorrect values (e.g., \"error\", \"warning\")"
        },
        "validationRegex": {
          "type": "string",
          "description": "Validation regex pattern for allowed values eg: [0-9]"
        },
        "isValidationEnabled": {
          "type": "boolean",
          "description": "Whether validation is enabled"
        }
      }
    },
    "TranslationDto": {
      "type": "object",
      "properties": {
        "de": {
          "type": "string",
          "description": "German text"
        },
        "en": {
          "type": "string",
          "description": "English text"
        }
      },
      "required": [
        "de",
        "en"
      ]
    },
    "ValidationMessages": {
      "type": "object",
      "properties": {
        "errorMessage": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        },
        "warningMessage": {
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/TranslationDto"
            }
          ]
        }
      },
      "required": [
        "errorMessage",
        "warningMessage"
      ]
    },
    "WageTaxAnswer2024Dto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "wageTax"
          ],
          "description": "Answer discriminator: Lohnsteuerbescheinigung (wage tax certificate).",
          "x-order": 0
        },
        "taxYear": {
          "type": "number",
          "description": "Scenario tax year for this filing (e.g. 2024). Must match `input.taxYear` on GET question and the filing record; persisted on the answer `value` JSON.",
          "x-order": 1
        },
        "taxClass": {
          "type": "string",
          "enum": [
            "I",
            "II",
            "III",
            "IV",
            "V",
            "VI"
          ],
          "description": "Line — Tax class (Steuerklasse I–VI).",
          "x-order": 2
        },
        "certificationPeriodStart": {
          "type": "string",
          "format": "date",
          "description": "Line 1 — Certification period start (ISO date string; must fall in tax year 2024 for validation).\n\nFormat: YYYY-MM-DD.",
          "x-order": 3
        },
        "certificationPeriodEnd": {
          "type": "string",
          "format": "date",
          "description": "Line 1 — Certification period end (ISO date string; on or after start, calendar year 2024).\n\nFormat: YYYY-MM-DD.",
          "x-order": 4
        },
        "periodsWithoutWage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Line 2 — Periods without entitlement to wages (free text).\n\nScalar: string (all characters allowed) or JSON null; property may also be omitted.",
          "x-order": 5
        },
        "grossWages": {
          "type": "number",
          "description": "Line 3 — Gross wages (brutto; certificate excludes lines 9 and 10 from this line). Optional negative sign.",
          "x-order": 6
        },
        "incomeTaxWithheld": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 4 — Income tax withheld (Lohnsteuer). Optional negative sign.",
          "x-order": 7
        },
        "solidaritySurcharge": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 5 — Solidarity surcharge (Solidaritätszuschlag). Optional negative sign.",
          "x-order": 8
        },
        "churchTax": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 6 — Church tax (Kirchensteuer). Optional negative sign.",
          "x-order": 9
        },
        "churchTaxSpouse": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 7 — Church tax (spouse) (Kirchensteuer Ehepartner). Optional negative sign.",
          "x-order": 10
        },
        "pensionIncluded": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 8 — Pension benefits included in line 3 (Versorgungsbezüge in 3.). Optional negative sign.",
          "x-order": 11
        },
        "pensionReducedTax": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 9 — Reduced-taxed pension benefits for several years (ermäßigt besteuerte Versorgungsbezüge). Optional negative sign.",
          "x-order": 12
        },
        "multiYearCompensation": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 10 — Reduced-taxed multi-year wages / compensation excluding line 9 (Mehrjahres-/Entschädigungen). Optional negative sign.",
          "x-order": 13
        },
        "taxOnReduced": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 11 — Income tax on amounts in lines 9 and 10 (Lohnsteuer für Nr. 9 und 10). Optional negative sign.",
          "x-order": 14
        },
        "solzOnReduced": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 12 — Solidarity surcharge on amounts in lines 9 and 10 (Solidaritätszuschlag für Nr. 9 und 10). Optional negative sign.",
          "x-order": 15
        },
        "churchTaxOnReduced": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 13 — Church tax on amounts in lines 9 and 10 (Kirchensteuer für Nr. 9 und 10). Optional negative sign.",
          "x-order": 16
        },
        "churchTaxSpouseReduced": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 14 — Spouse church tax on amounts in lines 9 and 10 (Kirchensteuer Ehepartner für Nr. 9 und 10). Optional negative sign.",
          "x-order": 17
        },
        "shortTimeAllowance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 15 — Short-time allowance and similar (e.g. Kurzarbeitergeld, maternity subsidy). Optional negative sign.",
          "x-order": 18
        },
        "taxFreeWagesDTA": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 16a — Tax-free wages under a double taxation agreement (DBA). Optional negative sign.",
          "x-order": 19
        },
        "taxFreeWagesForeignRelief": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 16b — Tax-free wages under the Foreign Employment Relief (Auslandstätigkeitserlass). Optional negative sign.",
          "x-order": 20
        },
        "commuteAllowanceTaxFree": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 17 — Tax-free commuting allowance (Fahrtkosten steuerfrei). No negative sign.",
          "x-order": 21
        },
        "commuteAllowanceFlat": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 18 — Flat-rate taxed commuting allowance (Fahrtkosten pauschal besteuert). No negative sign.",
          "x-order": 22
        },
        "taxableCompensationMultiYear": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 19 — Taxable multi-year compensation and wages included in line 3 (steuerpflichtig in 3.). Optional negative sign.",
          "x-order": 23
        },
        "mealSubsidy": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 20 — Meal subsidies for work away from home (Verpflegung Auswärtstätigkeit). No negative sign.",
          "x-order": 24
        },
        "dualHouseholdSubsidy": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 21 — Dual household subsidies (zweiter Haushalt). No negative sign.",
          "x-order": 25
        },
        "employerPension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 22a — Employer contribution to statutory pension insurance (gesetzliche RV). Optional negative sign.",
          "x-order": 26
        },
        "employerProfessionalPension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 22b — Employer contribution to professional / occupational pension scheme (berufsständische Versorgung). Optional negative sign.",
          "x-order": 27
        },
        "employeePension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 23a — Employee contribution to statutory pension insurance. Optional negative sign.",
          "x-order": 28
        },
        "employeeProfessionalPension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 23b — Employee contribution to professional / occupational pension scheme. Optional negative sign.",
          "x-order": 29
        },
        "employerHealthInsurance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 24a — Tax-free employer contributions to statutory health insurance (gesetzliche KV). Optional negative sign.",
          "x-order": 30
        },
        "employerPrivateHealthInsurance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 24b — Tax-free employer contributions to private health insurance (private KV). Optional negative sign.",
          "x-order": 31
        },
        "employerLongTermCare": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 24c — Tax-free employer contributions to statutory long-term care insurance (Pflegeversicherung). Optional negative sign.",
          "x-order": 32
        },
        "employeeHealthInsurance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 25 — Employee statutory health insurance contribution (AN-KV). Optional negative sign.",
          "x-order": 33
        },
        "employeeNursingCare": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 26 — Employee long-term care insurance contribution (AN-PV). Optional negative sign.",
          "x-order": 34
        },
        "employeeUnemployment": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 27 — Employee unemployment insurance contribution (AN-AV). Optional negative sign.",
          "x-order": 35
        },
        "privateHealthCareOrMinimum": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 28 — Private health / long-term care insurance or statutory minimum (PKV / Mindestwert). Optional negative sign.",
          "x-order": 36
        },
        "pensionAllowanceBase": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 29 — Assessment basis for pension allowance relating to line 8 (Versorgungsfreibetrag zu 8.). Optional negative sign.",
          "x-order": 37
        },
        "pensionStartYear": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 30 — Relevant calendar year for pension (maßgebendes Kalenderjahr Versorgung), four-digit year.\n\nYear format (YYYY).",
          "x-order": 38
        },
        "pensionMonths": {
          "type": [
            "string",
            "null"
          ],
          "description": "Line 31 — First and last month of pension payments (MM-MM, e.g. 01-12).\n\nMonth range format (MM-MM).",
          "x-order": 39
        },
        "deathBenefit": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 32 — Death benefits, severance / capital payments included in lines 3 and 8 (Sterbegeld, Abfindungen). Optional negative sign.",
          "x-order": 40
        },
        "DTAturkey": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 34 — Tax-free allowance under the Germany–Turkey DTA (Freibetrag DBA Türkei). Optional negative sign.",
          "x-order": 41
        }
      },
      "required": [
        "type",
        "taxYear",
        "taxClass",
        "certificationPeriodStart",
        "certificationPeriodEnd",
        "grossWages"
      ]
    },
    "WageTaxAnswer2025Dto": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "wageTax"
          ],
          "description": "Answer discriminator: Lohnsteuerbescheinigung (wage tax certificate).",
          "x-order": 0
        },
        "taxYear": {
          "type": "number",
          "description": "Scenario tax year for this filing (e.g. 2025). Must match `input.taxYear` on GET question and the filing record; persisted on the answer `value` JSON.",
          "x-order": 1
        },
        "taxClass": {
          "type": "string",
          "enum": [
            "I",
            "II",
            "III",
            "IV",
            "V",
            "VI"
          ],
          "description": "Line — Tax class (Steuerklasse I–VI).",
          "x-order": 2
        },
        "certificationPeriodStart": {
          "type": "string",
          "format": "date",
          "description": "Line 1 — Certification period start (ISO date string; must fall in tax year 2025 for validation).\n\nFormat: YYYY-MM-DD.",
          "x-order": 3
        },
        "certificationPeriodEnd": {
          "type": "string",
          "format": "date",
          "description": "Line 1 — Certification period end (ISO date string; on or after start, calendar year 2025).\n\nFormat: YYYY-MM-DD.",
          "x-order": 4
        },
        "periodsWithoutWage": {
          "type": [
            "string",
            "null"
          ],
          "description": "Line 2 — Periods without entitlement to wages (free text; may be null).\n\nString (all characters allowed).",
          "x-order": 5
        },
        "grossWages": {
          "type": "number",
          "description": "Line 3 — Gross wages (brutto). Optional negative sign.",
          "x-order": 6
        },
        "incomeTaxWithheld": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 4 — Income tax withheld (Lohnsteuer). No negative sign.",
          "x-order": 7
        },
        "solidaritySurcharge": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 5 — Solidarity surcharge (Solidaritätszuschlag). No negative sign.",
          "x-order": 8
        },
        "churchTax": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 6 — Church tax (Kirchensteuer). No negative sign.",
          "x-order": 9
        },
        "churchTaxSpouse": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 7 — Church tax (spouse) (Kirchensteuer Ehepartner). No negative sign.",
          "x-order": 10
        },
        "pensionIncluded": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 8 — Pension benefits included in line 3 (Versorgungsbezüge in 3.). Optional negative sign.",
          "x-order": 11
        },
        "pensionReducedTax": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 9 — Multi-year pension benefits included in line 3 (Versorgungsbezüge für mehrere Jahre in 3.). Optional negative sign.",
          "x-order": 12
        },
        "taxableCompensationMultiYear": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 10 — Severance and multi-year wages included in line 3 (Entschädigungen / Mehrjähriger Arbeitslohn in 3.; former line 19 on older forms). Optional negative sign.",
          "x-order": 13
        },
        "shortTimeAllowance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 15 — Wage replacement benefits subject to progression clause (Lohnersatzleistungen / Progressionsvorbehalt). Optional negative sign.",
          "x-order": 14
        },
        "subsetShortTimeAllowance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 15a — Short-time allowance included in line 15 (Kurzarbeitergeld in 15. enthalten). Optional negative sign.",
          "x-order": 15
        },
        "taxFreeWagesDTA": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 16a — Tax-free wages under a double taxation agreement (DBA). Optional negative sign.",
          "x-order": 16
        },
        "taxFreeWagesForeignRelief": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 16b — Tax-free wages under the Foreign Employment Relief (Auslandstätigkeitserlass). Optional negative sign.",
          "x-order": 17
        },
        "commuteAllowanceTaxFree": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 17 — Tax-free commuting allowance (Fahrtkosten steuerfrei). No negative sign.",
          "x-order": 18
        },
        "commuteAllowanceFlat": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 18 — Flat-rate taxed commuting allowance (Fahrtkosten pauschal besteuert). No negative sign.",
          "x-order": 19
        },
        "mealSubsidy": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 20 — Meal subsidies for work away from home (Verpflegung Auswärtstätigkeit). No negative sign.",
          "x-order": 20
        },
        "dualHouseholdSubsidy": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 21 — Dual household subsidies (zweiter Haushalt). No negative sign.",
          "x-order": 21
        },
        "employerPension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 22a — Employer contribution to statutory pension insurance (gesetzliche RV). Optional negative sign.",
          "x-order": 22
        },
        "employerProfessionalPension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 22b — Employer contribution to professional / occupational pension scheme (berufsständische Versorgung). Optional negative sign.",
          "x-order": 23
        },
        "employeePension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 23a — Employee contribution to statutory pension insurance. Optional negative sign.",
          "x-order": 24
        },
        "employeeProfessionalPension": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 23b — Employee contribution to professional / occupational pension scheme. Optional negative sign.",
          "x-order": 25
        },
        "employerHealthInsurance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 24a — Tax-free employer contributions to statutory health insurance (gesetzliche KV). Optional negative sign.",
          "x-order": 26
        },
        "employerPrivateHealthInsurance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 24b — Tax-free employer contributions to private health insurance (private KV). Optional negative sign.",
          "x-order": 27
        },
        "employerLongTermCare": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 24c — Tax-free employer contributions to statutory long-term care insurance (Pflegeversicherung). Optional negative sign.",
          "x-order": 28
        },
        "employeeHealthInsurance": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 25 — Employee statutory health insurance contribution (AN-KV). Optional negative sign.",
          "x-order": 29
        },
        "employeeNursingCare": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 26 — Employee long-term care insurance contribution (AN-PV). Optional negative sign.",
          "x-order": 30
        },
        "employeeUnemployment": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 27 — Employee unemployment insurance contribution (AN-AV). Optional negative sign.",
          "x-order": 31
        },
        "privateHealthCareOrMinimum": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 28 — Private health / long-term care insurance or statutory minimum (PKV / Mindestwert). Optional negative sign.",
          "x-order": 32
        },
        "pensionAllowanceBase": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 29 — Assessment basis for pension allowance relating to line 8 (Versorgungsfreibetrag zu 8.). Optional negative sign.",
          "x-order": 33
        },
        "pensionStartYear": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 30 — Relevant calendar year for pension (maßgebendes Kalenderjahr Versorgung), four-digit year.\n\nYear format (YYYY).",
          "x-order": 34
        },
        "pensionMonths": {
          "type": [
            "string",
            "null"
          ],
          "description": "Line 31 — First and last month of pension payments (MM-MM, e.g. 01-12).\n\nRange of months format (MM-MM).",
          "x-order": 35
        },
        "deathBenefit": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 32 — Death benefits, severance / capital payments included in lines 3 and 8 (Sterbegeld, Abfindungen). Optional negative sign.",
          "x-order": 36
        },
        "DTAturkey": {
          "type": [
            "number",
            "null"
          ],
          "description": "Line 34 — Tax-free allowance under the Germany–Turkey DTA (Freibetrag DBA Türkei). Optional negative sign.",
          "x-order": 37
        }
      },
      "required": [
        "type",
        "taxYear",
        "taxClass",
        "certificationPeriodStart",
        "certificationPeriodEnd",
        "grossWages"
      ]
    },
    "WageTaxInput": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "wageTax"
          ],
          "description": "Structured form for a Lohnsteuerbescheinigung (wage tax certificate). Field set follows this filing’s scenario tax year — see `taxYear` and OpenAPI schemas `WageTaxAnswer2024Dto` vs `WageTaxAnswer2025Dto`."
        },
        "taxYear": {
          "type": "number",
          "description": "Scenario tax year for this filing (same value used to validate PUT /answer wage tax payloads)."
        }
      },
      "required": [
        "type",
        "taxYear"
      ]
    }
  }
}