taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

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:
Mpackages/web-util/src/forms/field-types.ts | 9++++++++-
Apackages/web-util/src/forms/fields/InputDrilldown.tsx | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpackages/web-util/src/forms/forms-types.ts | 6++++++
Mpackages/web-util/src/forms/forms-utils.ts | 16++++++++++++++++
Mpackages/web-util/src/forms/gana/gls_merchant_onboarding.ts | 38+++++++++++++++++---------------------
Mpackages/web-util/src/utils/select-ui-lists.ts | 511+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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", + }, + }, +};