commit ad440edfd138395c1de0c4e652af676a038829a1
parent a106b127856d3311a09d2e837a0f24da7aa8e970
Author: Florian Dold <florian@dold.me>
Date: Mon, 16 Jun 2025 16:13:01 +0200
forms: gls industry classification drilldown
Diffstat:
6 files changed, 629 insertions(+), 22 deletions(-)
diff --git a/packages/web-util/src/forms/field-types.ts b/packages/web-util/src/forms/field-types.ts
@@ -1,12 +1,13 @@
import { VNode } from "preact";
import { Caption } from "./Caption.js";
-import { InputDownloadLink } from "./fields/InputDownloadLink.js";
import { ExternalLink } from "./fields/ExternalLink.js";
import { InputAbsoluteTime } from "./fields/InputAbsoluteTime.js";
import { InputAmount } from "./fields/InputAmount.js";
import { InputArray } from "./fields/InputArray.js";
import { InputChoiceHorizontal } from "./fields/InputChoiceHorizontal.js";
import { InputChoiceStacked } from "./fields/InputChoiceStacked.js";
+import { InputDownloadLink } from "./fields/InputDownloadLink.js";
+import { InputDrilldown } from "./fields/InputDrilldown.js";
import { InputDuration } from "./fields/InputDuration.js";
import { InputDurationText } from "./fields/InputDurationText.js";
import { InputFile } from "./fields/InputFile.js";
@@ -37,6 +38,7 @@ type FieldType<T extends object = any, K extends keyof T = any> = {
text: Parameters<typeof InputText>[0];
textArea: Parameters<typeof InputTextArea>[0];
choiceStacked: Parameters<typeof InputChoiceStacked<T[K]>>[0];
+ drilldown: Parameters<typeof InputDrilldown>[0];
choiceHorizontal: Parameters<typeof InputChoiceHorizontal<T[K]>>[0];
absoluteTimeText: Parameters<typeof InputAbsoluteTime>[0];
isoDateText: Parameters<typeof InputIsoDate>[0];
@@ -75,6 +77,10 @@ export type UIFormField =
type: "choiceHorizontal";
properties: FieldType["choiceHorizontal"];
}
+ | {
+ type: "drilldown";
+ properties: FieldType["drilldown"];
+ }
| { type: "integer"; properties: FieldType["integer"] }
| { type: "secret"; properties: FieldType["secret"] }
| { type: "toggle"; properties: FieldType["toggle"] }
@@ -136,6 +142,7 @@ export const UIFormConfiguration: UIFormFieldMap = {
toggle: InputToggle,
//@ts-ignore
amount: InputAmount,
+ drilldown: InputDrilldown,
duration: InputDuration,
durationText: InputDurationText,
};
diff --git a/packages/web-util/src/forms/fields/InputDrilldown.tsx b/packages/web-util/src/forms/fields/InputDrilldown.tsx
@@ -0,0 +1,71 @@
+import { i18n, TranslatedString } from "@gnu-taler/taler-util";
+import { Fragment, h, VNode } from "preact";
+import { useState } from "preact/hooks";
+import { UIFormProps } from "../FormProvider.js";
+import { noHandlerPropsAndNoContextForField } from "./InputArray.js";
+import { InputSelectOne } from "./InputSelectOne.js";
+
+export interface ChoiceH<V> {
+ label: TranslatedString;
+ value: V;
+}
+
+export function InputDrilldown(
+ props: {
+ choices: any;
+ } & UIFormProps<any>,
+): VNode {
+ const { hidden, choices, label, tooltip, help, required, converter } = props;
+ const { value, onChange } =
+ props.handler ?? noHandlerPropsAndNoContextForField(props.name);
+ if (hidden) {
+ return <Fragment />;
+ }
+
+ const [choiceStack, setChoiceStack] = useState<string[]>([]);
+
+ let ch = props.choices;
+
+ let inputs = [];
+
+ for (let lvl = 0; lvl < choiceStack.length + 1; lvl++) {
+ if (typeof ch === "string") {
+ break;
+ }
+ inputs.push(
+ <InputSelectOne
+ name={props.name}
+ label={i18n.str`${props.label} (Classification level ${lvl + 1})`}
+ required={required}
+ handler={{
+ name: choiceStack.join(","),
+ onChange(x) {
+ if (x != null) {
+ const cs = [...choiceStack.slice(0, lvl), x];
+ let myCh = props.choices;
+ for (let c of cs) {
+ myCh = myCh[c];
+ }
+ if (typeof myCh === "string") {
+ onChange(myCh);
+ }
+ setChoiceStack(cs);
+ } else {
+ setChoiceStack([...choiceStack.slice(0, lvl)]);
+ onChange(undefined);
+ }
+ },
+ value: choiceStack[lvl],
+ }}
+ choices={Object.keys(ch).map((x) => ({
+ label: x as TranslatedString,
+ value: x,
+ }))}
+ />,
+ );
+
+ ch = ch[choiceStack[lvl]];
+ }
+
+ return <>{inputs}</>;
+}
diff --git a/packages/web-util/src/forms/forms-types.ts b/packages/web-util/src/forms/forms-types.ts
@@ -93,6 +93,7 @@ export type UIFormElementConfig =
| UIFormFieldText
| UIFormFieldTextArea
| UIFormFieldToggle
+ | UIFormFieldDrilldown
| UIFormVoid;
type UIFormVoid = {
@@ -174,6 +175,11 @@ type UIFormFieldChoiceHorizontal = {
choices: Array<SelectUiChoice>;
} & UIFormFieldBaseConfig;
+type UIFormFieldDrilldown = {
+ type: "drilldown";
+ choices: any;
+} & UIFormFieldBaseConfig;
+
type UIFormFieldChoiceStacked = {
type: "choiceStacked";
choices: Array<SelectUiChoice>;
diff --git a/packages/web-util/src/forms/forms-utils.ts b/packages/web-util/src/forms/forms-utils.ts
@@ -193,6 +193,22 @@ export function convertFormConfigToUiField(
},
} as UIFormField;
}
+ case "drilldown": {
+ return {
+ type: "drilldown",
+ properties: {
+ ...convertBaseFieldsProps(i18n_, config),
+ ...convertInputFieldsProps(
+ name,
+ handler,
+ config,
+ getConverterByFieldType(config.type, config),
+ ),
+ hidden,
+ choices: config.choices,
+ },
+ } as UIFormField;
+ }
case "choiceStacked": {
return {
type: "choiceStacked",
diff --git a/packages/web-util/src/forms/gana/gls_merchant_onboarding.ts b/packages/web-util/src/forms/gana/gls_merchant_onboarding.ts
@@ -8,6 +8,8 @@ import {
import {
countryNameList,
countryNationalityList,
+ drilldownGlsIndustries,
+ germanBusinessTypes,
} from "../../utils/select-ui-lists.js";
export const form_gls_merchant_onboarding = (
@@ -71,7 +73,7 @@ export function gls_merchant_onboarding(
},
},
{
- id: TalerFormAttributes.PERSON_NATIONALITY,
+ id: TalerFormAttributes.NATIONALITY,
label: i18n.str`Nationality`,
type: "selectOne",
choices: countryNationalityList(i18n),
@@ -142,17 +144,15 @@ export function gls_merchant_onboarding(
id: TalerFormAttributes.BUSINESS_TYPE,
label: i18n.str`Legal form`,
required: true,
- type: "choiceHorizontal",
- choices: [
- {
- value: "OTHER",
- label: "Other (free-form selection)",
- },
- ],
+ type: "selectOne",
+ choices: germanBusinessTypes(i18n),
},
{
id: TalerFormAttributes.BUSINESS_TYPE_OTHER,
label: i18n.str`Legal form (free-form entry for other)`,
+ hide(value, root) {
+ return root[TalerFormAttributes.BUSINESS_TYPE] !== "OTHER";
+ },
required: true,
type: "text",
},
@@ -212,21 +212,17 @@ export function gls_merchant_onboarding(
},
{
id: TalerFormAttributes.BUSINESS_INDUSTRY,
- type: "choiceHorizontal",
- choices: [
- {
- value: "OTHER",
- label: "Other (free-form selection)",
- },
- ],
- label: i18n.str`Industry (choose from list)`,
- },
- {
- id: TalerFormAttributes.BUSINESS_INDUSTRY_OTHER,
- label: i18n.str`Industry (free-form entry for other)`,
- type: "text",
+ label: i18n.str`Industry`,
required: true,
+ type: "drilldown",
+ choices: drilldownGlsIndustries,
},
+ // {
+ // id: TalerFormAttributes.BUSINESS_INDUSTRY_OTHER,
+ // label: i18n.str`Industry (free-form entry for other)`,
+ // type: "text",
+ // required: true,
+ // },
],
},
{
diff --git a/packages/web-util/src/utils/select-ui-lists.ts b/packages/web-util/src/utils/select-ui-lists.ts
@@ -59,3 +59,514 @@ export function languageNameList(
label: translator(i18n),
}));
}
+
+export const germanBusinessTypesList = {
+ DE_GMBH: (i18n: InternationalizationAPI) => i18n.str`GmbH`,
+ DE_GMBH_IG: (i18n: InternationalizationAPI) => i18n.str`GmbH i.G.`,
+ DE_UG: (i18n: InternationalizationAPI) => i18n.str`UG`,
+ DE_UG_IG: (i18n: InternationalizationAPI) => i18n.str`UG i.G.`,
+ DE_OHG: (i18n: InternationalizationAPI) => i18n.str`UHG`,
+ DE_KG: (i18n: InternationalizationAPI) => i18n.str`KG`,
+ DE_EV: (i18n: InternationalizationAPI) => i18n.str`e.V.`,
+ DE_EV_IG: (i18n: InternationalizationAPI) => i18n.str`e.V. i.G.`,
+ DE_EG: (i18n: InternationalizationAPI) => i18n.str`eG`,
+ DE_EG_IG: (i18n: InternationalizationAPI) => i18n.str`eG i.G.`,
+ DE_PARTG: (i18n: InternationalizationAPI) => i18n.str`PartG`,
+ DE_EK: (i18n: InternationalizationAPI) => i18n.str`e.K.`,
+ DE_AG_UNLISTED: (i18n: InternationalizationAPI) =>
+ i18n.str`AG (nicht börsennotiert)`,
+ DE_AG_LISTED: (i18n: InternationalizationAPI) => i18n.str`AG (börsennotiert)`,
+ DE_GBR: (i18n: InternationalizationAPI) => i18n.str`GbR`,
+ DE_NEV: (i18n: InternationalizationAPI) => i18n.str`n.e.V.`,
+ DE_PARTEI: (i18n: InternationalizationAPI) => i18n.str`Partei`,
+ DE_WEG: (i18n: InternationalizationAPI) => i18n.str`WEG`,
+ OTHER: (i18n: InternationalizationAPI) => i18n.str`Anderes`,
+};
+
+export function germanBusinessTypes(
+ i18n: InternationalizationAPI,
+): SelectUiChoice[] {
+ return Object.entries(germanBusinessTypesList).map(([value, translator]) => ({
+ value,
+ label: translator(i18n),
+ }));
+}
+
+export const drilldownGlsIndustries = {
+ "Land- und Forstwirtschaft, Fischerei": {
+ "Landwirtschaft, Jagd": {
+ Pflanzenbau: "aaa",
+ Tierhaltung: "aab",
+ "Gemischte Landwirtschaft": "aac",
+ "Erbringung von landwirtschaftlichen und gärtnerischen Dienstleistungen":
+ "aad",
+ Jagd: "aae",
+ },
+ "Forstwirtschaft, Fischerei, Fischzucht": {
+ "Erbringung von forstwirtschaftlichen Dienstleistungen": "aba",
+ Fischerei: "abb",
+ },
+ },
+ "Bergbau und Gewinnung von Steinen und Erden": {
+ "Kohlenbergbau, Torfgewinnung, Erdöl, Erdgas, Erzbergbau": {
+ "Steinkohlenbergbau und -brikettherstellung": "baa",
+ "Gewinnung von Erdöl und Erdgas": "bab",
+ Eisenerzbergbau: "bac",
+ },
+ "Gewinnung von Steinen und Erden, sonstiger Bergbau": {
+ "Gewinnung von Natursteinen": "bba",
+ "Gewinnung von Kies, Sand, Ton und Kaolin": "bbb",
+ "Gewinnung von Mineralien für die Herstellung von chemischen Erzeugnissen":
+ "bbc",
+ "Gewinnung von Salz": "bbd",
+ "Gewinnung von Steinen und Erden, anderweitig nicht genannt, sonstiger Bergbau":
+ "bbe",
+ },
+ },
+ "Verarbeitendes Gewerbe": {
+ Ernährungsgewerbe: {
+ "Schlachten und Fleischverarbeitung": "caa",
+ Fischverarbeitung: "cab",
+ "Obst- und Gemüseverarbeitung": "cac",
+ "Herstellung von pflanzlichen und tierischen Ölen und Fetten": "cad",
+ "Milchverarbeitung, Herstellung von Speiseeis": "cae",
+ "Mahl- und Schälmühlen, Herstellung von Stärke und Stärkeerzeugnissen":
+ "caf",
+ "Herstellung von Futtermitteln": "cag",
+ "Sonstiges Ernährungsgewerbe (ohne Getränkeherstellung)": "cah",
+ "Herstellung von Getränken": "cai",
+ },
+ "Textil-, Bekleidungs-, Ledergewerbe": {
+ "Spinnstoffaufbereitung und Spinnerei": "cba",
+ Weberei: "cbb",
+ Textilveredlung: "cbc",
+ "Herstellung von konfektionierten Textilwaren (ohne Bekleidung)": "cbd",
+ "Sonstiges Textilgewerbe (ohne Herstellung von Maschenware)": "cbe",
+ "Herstellung von gewirktem und gestricktem Stoff": "cbf",
+ "Herstellung von gewirkten und gestrickten Fertigerzeugnissen": "cbg",
+ "Herstellung von Lederbekleidung": "cbh",
+ "Herstellung von Bekleidung (ohne Lederbekleidung)": "cbi",
+ "Zurichtung und Färben von Fellen, Herstellung von Pelzwaren": "cbj",
+ "Herstellung von Leder und Lederfaserstoff": "cbk",
+ "Lederverarbeitung (ohne Herstellung von Lederbekleidung und Schuhen)":
+ "cbl",
+ "Herstellung von Schuhen": "cbm",
+ },
+ "Holzgewerbe (ohne Herstellung von Möbeln)": {
+ "Säge-, Hobel- und Holzimprägnierwerke": "cca",
+ "Herstellung von Furnier-, Sperrholz-, Holzfaser- und Holzspanplatten":
+ "ccb",
+ "Herstellung von Konstruktionsteilen, Fertigbauteilen, Ausbauelementen und Fertigteilbauten aus Holz":
+ "ccc",
+ "Herstellung von Verpackungsmitteln, Lagerbehältern und Ladungsträgern aus Holz":
+ "ccd",
+ "Herstellung von Holzwaren, anderweitig nicht genannt, sowie von Kork-, Flecht- und Korbwaren (ohne Herstellung von Möbeln)":
+ "cce",
+ },
+ "Papier-, Verlags-, Druckgewerbe": {
+ "Herstellung von Holz- und Zellstoff, Papier, Karton und Pappe": "cda",
+ "Herstellung von Waren aus Papier, Karton und Pappe": "cdb",
+ Verlagsgewerbe: "cdc",
+ Druckgewerbe: "cdd",
+ "Vervielfältigung von bespielten Ton-, Bild- und Datenträgern": "cde",
+ },
+ "Kokerei, Mineralölverarbeitung": {
+ Kokerei: "cea",
+ Mineralölverarbeitung: "ceb",
+ },
+ "Herstellung von chemischen und pharmazeutischen Erzeugnissen": {
+ "Herstellung von chemischen Grundstoffen": "cfa",
+ "Herstellung von Schädlingsbekämpfungs-, Pflanzenschutz- und Desinfektionsmitteln":
+ "cfb",
+ "Herstellung von Anstrichmitteln, Druckfarben und Kitten": "cfc",
+ "Herstellung von pharmazeutischen Erzeugnissen": "cfd",
+ "Herstellung von Seifen, Wasch-, Reinigungs- und Körperpflegemitteln sowie von Duftstoffen":
+ "cfe",
+ "Herstellung von sonstigen chemischen Erzeugnissen": "cff",
+ "Herstellung von Chemiefasern": "cfg",
+ },
+ "Herstellung von Gummi- und Kunststoffwaren": {
+ "Herstellung von Gummiwaren": "cga",
+ "Herstellung von Kunststoffwaren": "cgb",
+ },
+ "Herstellung von Glas und Glaswaren, Keramik, Verarbeitung von Steinen und Erden":
+ {
+ "Herstellung von Glas und Glaswaren": "cha",
+ "Herstellung von keramischen Erzeugnissen (ohne Herstellung von Ziegeln und Baukeramik)":
+ "chb",
+ "Herstellung von keramischen Wand- und Bodenfliesen und -platten":
+ "chc",
+ "Herstellung von Ziegeln und sonstiger Baukeramik": "chd",
+ "Herstellung von Zement, Kalk und gebranntem Gips": "che",
+ "Herstellung von Erzeugnissen aus Beton, Zement und Gips": "chf",
+ "Be- und Verarbeitung von Naturwerksteinen und Natursteinen, anderweitig nicht genannt":
+ "chg",
+ "Herstellung von sonstigen Erzeugnissen aus nicht metallischen Mineralien":
+ "chh",
+ },
+ "Metallerzeugung und -bearbeitung": {
+ "Erzeugung von Roheisen, Stahl und Ferrolegierungen": "cia",
+ "Herstellung von Rohren": "cib",
+ "Sonstige erste Bearbeitung von Eisen und Stahl": "cic",
+ "Erzeugung und erste Bearbeitung von NE-Metallen": "cid",
+ Gießereien: "cie",
+ },
+ "Herstellung von Metallerzeugnissen": {
+ "Stahl- und Leichtmetallbau": "cja",
+ "Herstellung von Metallbehältern mit einem Fassungsvermögen von mehr als 300 l, Herstellung von Heizkörpern und -kesseln für Zentralheizungen":
+ "cjb",
+ "Herstellung von Dampfkesseln (ohne Zentralheizungskessel)": "cjc",
+ "Herstellung von Schmiede-, Press-, Zieh- und Stanzteilen, gewalzten Ringen und pulvermetallurgischen Erzeugnissen":
+ "cjd",
+ "Oberflächenveredlung und Wärmebehandlung, Mechanik, anderweitig nicht genannt":
+ "cje",
+ "Herstellung von Schneidwaren, Werkzeugen, Schlössern und Beschlägen aus unedlen Metallen":
+ "cjf",
+ "Herstellung von sonstigen Metallwaren": "cjg",
+ },
+ Maschinenbau: {
+ "Herstellung von Maschinen für die Erzeugung und Nutzung von mechanischer Energie (ohne Motoren für Luft- und Straßenfahrzeuge)":
+ "cka",
+ "Herstellung von sonstigen nicht wirtschaftszweigspezifischen Maschinen":
+ "ckb",
+ "Herstellung von land- und forstwirtschaftlichen Maschinen": "ckc",
+ "Herstellung von Werkzeugmaschinen": "ckd",
+ "Herstellung von Maschinen für sonstige bestimmte Wirtschaftszweige":
+ "cke",
+ "Herstellung von Haushaltsgeräten, anderweitig nicht genannt": "ckf",
+ "Reparatur von sonstigen Ausrüstungen": "ckg",
+ },
+ "Herstellung von Büromaschinen, Datenverarbeitungsgeräten und -einrichtungen":
+ {
+ "Herstellung von Büromaschinen": "cla",
+ "Herstellung von Datenverarbeitungsgeräten und -einrichtungen": "clb",
+ "Reparatur von Datenverarbeitungs- und Telekommunikationsgeräten":
+ "clc",
+ },
+ "Herstellung von Geräten der Elektrizitätserzeugung, -verteilung": {
+ "Herstellung von Elektromotoren, Generatoren und Transformatoren": "cma",
+ "Herstellung von Elektrizitätsverteilungs- und -schalteinrichtungen":
+ "cmb",
+ "Herstellung von isolierten Elektrokabeln, -leitungen und -drähten":
+ "cmc",
+ "Herstellung von Akkumulatoren und Batterien": "cmd",
+ "Herstellung von elektrischen Lampen und Leuchten": "cme",
+ "Herstellung von elektrischen Ausrüstungen, anderweitig nicht genannt":
+ "cmf",
+ },
+ "Rundfunk- und Nachrichtentechnik": {
+ "Herstellung von elektronischen Bauelementen": "cna",
+ "Herstellung von Geräten und Einrichtungen der Telekommunikationstechnik":
+ "cnb",
+ "Herstellung von Rundfunkgeräten sowie phono- und videotechnischen Geräten":
+ "cnc",
+ },
+ "Medizin-, Mess-, Steuer- und Regelungstechnik, Optik, Herstellung von Uhren":
+ {
+ "Herstellung von medizinischen Geräten und orthopädischen Erzeugnissen":
+ "coa",
+ "Herstellung von Mess-, Kontroll-, Navigations- u.ä. Instrumenten und Vorrichtungen":
+ "cob",
+ "Herstellung von industriellen Prozesssteuerungseinrichtungen": "coc",
+ "Herstellung von optischen und fotografischen Geräten": "cod",
+ "Herstellung von Uhren": "coe",
+ "Reparatur von Haushaltswaren und Ziergegenständen aus Glas, Ton, Steinzeug und Porzellan":
+ "cof",
+ },
+ "Herstellung von Kraftwagen, Kraftwagenteilen": {
+ "Herstellung von Kraftwagen und Kraftwagenmotoren": "cpa",
+ "Herstellung von Karosserien, Aufbauten und Anhängern": "cpb",
+ "Herstellung von Teilen und Zubehör für Kraftwagen und Kraftwagenmotoren":
+ "cpc",
+ },
+ "Sonstiger Fahrzeugbau": {
+ "Schiff- und Bootsbau": "cqa",
+ Bahnindustrie: "cqb",
+ "Luft- und Raumfahrzeugbau": "cqc",
+ "Herstellung von Krafträdern, Fahrrädern und Behindertenfahrzeugen":
+ "cqd",
+ "Fahrzeugbau, anderweitig nicht genannt": "cqe",
+ },
+ "Herstellung von Möbeln, Schmuck, Musikinstrumenten, Sportgeräten, Spielwaren, sonstigen Erzeugnissen":
+ {
+ "Herstellung von Möbeln": "cra",
+ "Herstellung von Schmuck u.ä. Erzeugnissen": "crb",
+ "Herstellung von Musikinstrumenten": "crc",
+ "Herstellung von Sportgeräten": "crd",
+ "Herstellung von Spielwaren": "cre",
+ "Herstellung von sonstigen Erzeugnissen": "crf",
+ },
+ Recycling: {
+ "Recycling von metallischen Altmaterialien und Reststoffen": "csa",
+ "Recycling von nicht metallischen Altmaterialien und Reststoffen": "csb",
+ },
+ },
+ "Energie- und Wasserversorgung, Baugewerbe": {
+ Energieversorgung: {
+ Elektrizitätsversorgung: "daa",
+ Gasversorgung: "dab",
+ Wärmeversorgung: "dac",
+ },
+ Wasserversorgung: {
+ "Wassergewinnung mit Fremdbezug zur Verteilung": "dba",
+ "Wassergewinnung ohne Fremdbezug zur Verteilung": "dbb",
+ },
+ Baugewerbe: {
+ "Vorbereitende Baustellenarbeiten": "dca",
+ "Hoch- und Tiefbau": "dcb",
+ Bauinstallation: "dcc",
+ "Sonstiges Ausbaugewerbe": "dcd",
+ "Vermietung von Baumaschinen und -geräten mit Bedienungspersonal": "dce",
+ },
+ },
+ "Handel, Instandhaltung und Reparatur von Kraftfahrzeugen, Tankstellen": {
+ "Kraftfahrzeughandel, Instandhaltung und Reparatur von Kraftfahrzeugen, Tankstellen":
+ {
+ "Handel mit Kraftwagen": "eaa",
+ "Instandhaltung und Reparatur von Kraftwagen": "eab",
+ "Handel mit Kraftwagenteilen und -zubehör": "eac",
+ "Handel mit Krafträdern, Kraftradteilen und -zubehör, Instandhaltung und Reparatur von Krafträdern":
+ "ead",
+ Tankstellen: "eae",
+ },
+ "Handelsvermittlung, Großhandel": {
+ Handelsvermittlung: "eba",
+ "Großhandel mit landwirtschaftlichen Grundstoffen und lebenden Tieren":
+ "ebb",
+ "Großhandel mit Nahrungsmitteln, Getränken und Tabakwaren": "ebc",
+ "Großhandel mit Gebrauchs- und Verbrauchsgütern": "ebd",
+ "Großhandel mit nicht landwirtschaftlichen Halbwaren, Altmaterialien und Reststoffen":
+ "ebe",
+ "Großhandel mit Maschinen, Ausrüstungen und Zubehör": "ebf",
+ "Sonstiger Großhandel": "ebg",
+ },
+ Einzelhandel: {
+ "Einzelhandel mit Waren verschiedener Art (in Verkaufsräumen)": "eca",
+ "Facheinzelhandel mit Nahrungsmitteln, Getränken und Tabakwaren (in Verkaufsräumen)":
+ "ecb",
+ "Apotheken, Facheinzelhandel mit medizinischen, orthopädischen und kosmetischen Artikeln (in Verkaufsräumen)":
+ "ecc",
+ "Sonstiger Facheinzelhandel (in Verkaufsräumen)": "ecd",
+ "Einzelhandel mit Antiquitäten und Gebrauchtwaren (in Verkaufsräumen)":
+ "ece",
+ "Einzelhandel (nicht in Verkaufsräumen)": "ecf",
+ "Reparatur von Gebrauchsgütern": "ecg",
+ },
+ },
+ Gastgewerbe: {
+ Beherbergung: {
+ Hotellerie: "faa",
+ "Sonstiges Beherbergungsgewerbe": "fab",
+ },
+ Gastronomie: {
+ "Speisengeprägte Gastronomie": "fba",
+ "Getränkegeprägte Gastronomie": "fbb",
+ "Kantinen und Caterer": "fbc",
+ },
+ },
+ "Verkehr und Lagerei": {
+ "Landverkehr, Transport in Rohrfernleitungen": {
+ Eisenbahnverkehr: "gaa",
+ "Sonstiger Landverkehr": "gab",
+ "Transport in Rohrfernleitungen": "gac",
+ "Deutsche Bahn AG": "gad",
+ },
+ "Schifffahrt, Luftfahrt": {
+ "See- und Küstenschifffahrt": "gba",
+ Binnenschifffahrt: "gbb",
+ Linienflugverkehr: "gbc",
+ },
+ "Lagerei sowie Erbringung von sonstigen Dienstleistungen für den Verkehr": {
+ "Frachtumschlag und Lagerei": "gca",
+ "Sonstige Hilfs- und Nebentätigkeiten für den Verkehr": "gcb",
+ "Reisebüros und Reiseveranstalter": "gcc",
+ "Spedition, sonstige Verkehrsvermittlung": "gcd",
+ },
+ "Post-, Kurier- und Expressdienste": {
+ "Postverwaltung und private Post- und Kurierdienste": "gda",
+ Fernmeldedienste: "gdb",
+ "Telekom AG": "gdc",
+ "Deutsche Post AG": "gdd",
+ },
+ },
+ "Erbringung von Finanz- und Versicherungsdienstleistungen": {
+ "Kreditgewerbe, Versicherungsgewerbe": {
+ Wertpapierfirma: "haa",
+ "Sonstige Finanzierungsinstitutionen": "hab",
+ "Fonds von Kapitalgesellschaften": "hac",
+ "Ausländ. Finanzges. Als Kreditinst. Gem. §1Abs.1KWG": "had",
+ Geldmarktfonds: "hae",
+ "Sonstiges Versicherungsgewerbe": "hag",
+ },
+ "Mit Finanz- und Versicherungsdienstleistungen verbundene Tätigkeiten": {
+ "Mit dem Kreditgewerbe verbundene Tätigkeiten": "hba",
+ "Mit dem Versicherungsgewerbe verbundene Tätigkeiten": "hbb",
+ "Börseneinrichtungen mit tägl. Einschüssen": "hbc",
+ Postgiroämter: "hae",
+ "Zuständige genossenschaftliche Zentralbank": "hbg",
+ "Andere Genossenschaftliche Zentralbanken": "hbh",
+ "Angeschlossene Kreditgenoss.(nur für genoss. Zentralbanken)": "hbi",
+ "Sonstige mindestreservepflichtige Kreditinstitute": "hbj",
+ "Ausländische Kreditinstitute gem. § 53 KWG": "hbk",
+ "Internationale Organisationen im Bereich KI": "hbl",
+ "Multilaterale Entwicklungsbanken nicht mindestreservefrei und ohne Nullgewichtung":
+ "hbm",
+ "LbNRW/InvB Berlin/Hessen/WK/LaBo/BremAB": "hbo",
+ "Multilaterale Entwicklungsbanken nicht mindestreservefrei mit Nullgewichtung":
+ "hbp",
+ "Sonstige mindestreservefreie Kreditinstitute": "hbq",
+ "Internat. Organisationen im Bereich KI (AMR-frei)": "hbr",
+ "Europäische Investitionsbank": "hbs",
+ "Multilaterale Entwicklungsbanken (AMR-frei)": "hbt",
+ "Multilaterale Entwicklungsbanken mindestreservefrei und mit Nullgewichtung":
+ "hbu",
+ },
+ },
+ "Grundstücks- und Wohnungswesen, Vermietung (inkl. Bewegl. Sachen)": {
+ "Grundstücks- und Wohnungswesen, Vermietung n. bewegl. Sachen": {
+ "Erschließung, Kauf und Verkauf von Grundstücken, Gebäuden und Wohnungen":
+ "iaa",
+ "Vermietung und Verpachtung von eigenen Grundstücken, Gebäuden und Wohnungen":
+ "iab",
+ "Vermittlung und Verwaltung von fremden Grundstücken, Gebäuden und Wohnungen":
+ "iac",
+ "Vermietung und Verpachtung von eigenen Grundstücken und Nichtwohngebäuden und Bauträger für Nichtwohngebäude":
+ "iad",
+ },
+ "Vermietung beweglicher Sachen": {
+ "Vermietung von Kraftwagen bis 3,5 t Gesamtgewicht": "iba",
+ "Vermietung von Maschinen und Geräten": "ibb",
+ "Vermietung von Gebrauchsgütern, anderweitig nicht genannt": "ibc",
+ "Leasing von nichtfinanziellen immatriellen Vermögensgegenständen (ohne Copyrights)":
+ "ibd",
+ },
+ },
+ "Informations- und Datenverarbeitung, Forschung und Entwicklung": {
+ Informationsdienstleistungen: {
+ Hardwareberatung: "jaa",
+ Softwarehäuser: "jab",
+ },
+ Datenverarbeitung: {
+ Datenverarbeitungsdienste: "jba",
+ Datenbanken: "jbb",
+ "Instandhaltung und Reparatur von Büromaschinen, Datenverarbeitungsgeräten und -einrichtungen":
+ "jbc",
+ "Sonstige mit der Datenverarbeitung verbundene Tätigkeiten und Rundfunkveranstalter":
+ "jbd",
+ },
+ "Forschung und Entwicklung": {
+ "Forschung und Entwicklung im Bereich Natur-, Ingenieur-, Agrarwissenschaften und Medizin":
+ "jca",
+ "Forschung und Entwicklung im Bereich Rechts-, Wirtschafts- und Sozialwissenschaften sowie im Bereich Sprach-, Kultur- und Kunstwissenschaften":
+ "jcb",
+ },
+ },
+ "Erbringung von freiberuflichen, wirtschaftlichen und technischen Dienstleistungen":
+ {
+ "Freiberufliche Dienstleistungen": {
+ "Rechts-, Steuer- und Unternehmensberatung, Wirtschaftsprüfung, Buchführung, Markt- und Meinungsforschung, Managementtätigkeiten von Holdinggesellschaften":
+ "kaa",
+ "Architektur- und Ingenieurbüros": "kab",
+ Werbung: "kac",
+ "Personal- und Stellenvermittlung, Überlassung von Arbeitskräften":
+ "kad",
+ "Wach- und Sicherheitsdienste sowie Detekteien": "kae",
+ },
+ "Technische Dienstleistungen": {
+ "Technische, physikalische und chemische Untersuchung": "kba",
+ "Reinigung von Gebäuden, Inventar und Verkehrsmitteln": "kbb",
+ },
+ "Wirtschaftliche Dienstleistungen": {
+ "Erbringung von sonstigen wirtschaftlichen Dienstleistungen, anderweitig nicht genannt":
+ "kca",
+ },
+ },
+ "Öffentliche Verwaltung, Verteidigung, Sozialversicherung": {
+ "Verwaltung, Verteidigung, Sozialversicherung": {
+ "Öffentliche Verwaltung": "laa",
+ "Auswärtige Angelegenheiten, Verteidigung, Rechtspflege, öffentliche Sicherheit und Ordnung":
+ "lab",
+ "Sozialversicherung und Arbeitsförderung": "lac",
+ },
+ Bund: {
+ "Fonds Deutsche Einheit / Erblastentilgungsfonds": "lba",
+ "ERP-Sondervermögen": "lbb",
+ Bundeseisenbahnvermögen: "lbc",
+ },
+ Länder: {
+ Gemeinden: "lcb",
+ "Kommunale Zweckverbände": "lcc",
+ "Sonstige ausländische Gebietskörperschaften": "lcd",
+ },
+ },
+ "Gesundheits-, Veterinär- und Sozialwesen, Erziehung und Unterricht": {
+ "Erziehung und Unterricht": {
+ "Kindergärten, Vor- und Grundschulen": "maa",
+ "Weiterführende Schulen": "mab",
+ "Hochschulen und andere Bildungseinrichtungen des Tertiärsbereichs":
+ "mac",
+ "Erwachsenenbildung und sonstiger Unterricht": "mad",
+ },
+ "Gesundheits-, Veterinär- und Sozialwesen": {
+ Gesundheitswesen: "mba",
+ Veterinärwesen: "mbb",
+ Sozialwesen: "mbc",
+ },
+ },
+ "Abwasser- und Abfallentsorgung, Private Haushalte": {
+ Abwasserentsorgung: {
+ Abwasserbeseitigung: "naa",
+ },
+ Abfallbeseitigung: {
+ Abfallbeseitigung: "nba",
+ },
+ "Private Haushalte": {
+ "Private Haushalte mit sonstigem Hauspersonal": "nca",
+ },
+ },
+ "Interessenvertretungen sowie kirchliche und sonstige Vereinigungen, Organisationen":
+ {
+ Interessenvertretungen: {
+ "Wirtschafts- und Arbeitgeberverbände": "oaa",
+ Gewerkschaften: "oab",
+ Berufsorganisationen: "oac",
+ },
+ "Kirchliche und sonstige Vereinigungen": {
+ "Kirchliche und sonstige religiöse Vereinigungen": "oba",
+ "Politische Parteien und Vereinigungen": "obb",
+ "Interessenvertretungen und Vereinigungen, anderweitig nicht genannt":
+ "obc",
+ },
+ Organisationen: {
+ "Organisationen der freien Wohlfahrts-/Jugendpflege": "oca",
+ "Organisationen der Bildung/Wissenschaft/Forsch./Kultur": "ocb",
+ "Organisationen des Sports und Gesundheitswesens": "occ",
+ "Kommunale Spitzen- und Regionalverbände": "ocd",
+ "Sonstige Organisationen ohne Erwerbszweck": "oce",
+ },
+ },
+ "Kunst, Unterhaltung und Erholung, Erbringung von sonstigen Dienstleistungen":
+ {
+ "Kunst, Unterhaltung und Erholung": {
+ "Film- und Videofilmherstellung, -verleih und -vertrieb, Kinos": "paa",
+ "Rundfunkveranstalter, Herstellung von Hörfunk- und Fernsehprogrammen":
+ "pab",
+ "Erbringung von sonstigen kulturellen und unterhaltenden Leistungen":
+ "pac",
+ "Korrespondenz- und Nachrichtenbüros, selbstständige Journalistinnen und Journalisten":
+ "pad",
+ "Bibliotheken, Archive, Museen, botanische und zoologische Gärten":
+ "pae",
+ Sport: "paf",
+ "Erbringung von sonstigen Dienstleistungen für Unterhaltung, Erholung und Freizeit":
+ "pag",
+ },
+ "Erbringung von sonstigen Dienstleistungen": {
+ "Wäscherei und chemische Reinigung": "pba",
+ "Frisör- und Kosmetiksalons": "pbb",
+ Bestattungswesen: "pbc",
+ "Saunas, Solarien, Fitnesszentren u.ä.": "pbd",
+ "Erbringung von Dienstleistungen, anderweitig nicht genannt": "pbe",
+ },
+ },
+};