Repository: digitalservicebund/ris-adm-vwv
Pull request #311: Risdev 7022 use new endpoint for document type in frontend
Author: login: reckseba
Created: 2025-03-12T15:24:24Z | Merged: 2025-03-14T12:47:59Z



Diff:
diff --git a/frontend/e2e/RubrikenPage/Aktivzitierung.spec.ts b/frontend/e2e/RubrikenPage/Aktivzitierung.spec.ts
index 87644de61..b2c39f9a3 100644
--- a/frontend/e2e/RubrikenPage/Aktivzitierung.spec.ts
+++ b/frontend/e2e/RubrikenPage/Aktivzitierung.spec.ts
@@ -116,11 +116,11 @@ test.describe('RubrikenPage - Aktivzitierung - Mocked routes', () => {
         .click()
       await page.getByRole('button', { name: 'Nach Entscheidung suchen' }).click()
       await expect(
-        page.getByText('label1, 01.02.2022, test fileNumber1, documentType1'),
+        page.getByText('label1, 01.02.2022, test fileNumber1, Verwaltungsvorschrift'),
       ).toBeVisible()
       await page.getByRole('button', { name: 'Treffer übernehmen' }).click()
       await expect(
-        page.getByText('Übernahme, label1, 01.02.2022, test fileNumber1, documentType1'),
+        page.getByText('Übernahme, label1, 01.02.2022, test fileNumber1, Verwaltungsvorschrift'),
       ).toBeVisible()
 
       // re-open the same record
@@ -144,7 +144,7 @@ test.describe('RubrikenPage - Aktivzitierung - Mocked routes', () => {
 
       // then
       await expect(
-        page.getByText('Übernahme, label1, 01.02.2022, test fileNumber1, VR'),
+        page.getByText('Übernahme, label1, 01.02.2022, test fileNumber1, Verwaltungsregelung'),
       ).toBeVisible()
 
       await page.getByTestId('list-entry-0').click()
diff --git a/frontend/e2e/RubrikenPage/Formaldaten.spec.ts b/frontend/e2e/RubrikenPage/Formaldaten.spec.ts
index 7a3bfb856..5bfccc179 100644
--- a/frontend/e2e/RubrikenPage/Formaldaten.spec.ts
+++ b/frontend/e2e/RubrikenPage/Formaldaten.spec.ts
@@ -83,13 +83,13 @@ test.describe('RubrikenPage - Formatdaten', () => {
       // when
       await page.getByText('VR').click()
       // then
-      await expect(dokumenttypElement).toHaveValue('VR')
+      await expect(dokumenttypElement).toHaveValue('Verwaltungsregelung')
 
       // when
       await page.getByRole('button', { name: 'Speichern', exact: true }).click()
       await page.reload()
       // then
-      await expect(dokumenttypElement).toHaveValue('VR')
+      await expect(dokumenttypElement).toHaveValue('Verwaltungsregelung')
     },
   )
 
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index ca111f23d..f05199c58 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -81,6 +81,7 @@
         "eslint-plugin-vue": "^10.0.0",
         "jsdom": "^26.0.0",
         "license-checker-rseidelsohn": "^4.4.2",
+        "msw": "^2.7.3",
         "pinia": "^3.0.1",
         "postcss": "^8.5.3",
         "prettier": "^3.5.3",
@@ -619,6 +620,63 @@
       "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==",
       "license": "MIT"
     },
+    "node_modules/@bundled-es-modules/cookie": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz",
+      "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "cookie": "^0.7.2"
+      }
+    },
+    "node_modules/@bundled-es-modules/statuses": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz",
+      "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "statuses": "^2.0.1"
+      }
+    },
+    "node_modules/@bundled-es-modules/tough-cookie": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz",
+      "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@types/tough-cookie": "^4.0.5",
+        "tough-cookie": "^4.1.4"
+      }
+    },
+    "node_modules/@bundled-es-modules/tough-cookie/node_modules/tough-cookie": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+      "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@bundled-es-modules/tough-cookie/node_modules/universalify": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
     "node_modules/@csstools/color-helpers": {
       "version": "5.0.2",
       "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
@@ -1481,6 +1539,134 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/@inquirer/confirm": {
+      "version": "5.1.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.7.tgz",
+      "integrity": "sha512-Xrfbrw9eSiHb+GsesO8TQIeHSMTP0xyvTCeeYevgZ4sKW+iz9w/47bgfG9b0niQm+xaLY2EWPBINUPldLwvYiw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^10.1.8",
+        "@inquirer/type": "^3.0.5"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@inquirer/core": {
+      "version": "10.1.8",
+      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.8.tgz",
+      "integrity": "sha512-HpAqR8y715zPpM9e/9Q+N88bnGwqqL8ePgZ0SMv/s3673JLMv3bIkoivGmjPqXlEgisUksSXibweQccUwEx4qQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/figures": "^1.0.11",
+        "@inquirer/type": "^3.0.5",
+        "ansi-escapes": "^4.3.2",
+        "cli-width": "^4.1.0",
+        "mute-stream": "^2.0.0",
+        "signal-exit": "^4.1.0",
+        "wrap-ansi": "^6.2.0",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@inquirer/core/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@inquirer/core/node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@inquirer/figures": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz",
+      "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/type": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz",
+      "integrity": "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/node": ">=18"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -1556,6 +1742,24 @@
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
+    "node_modules/@mswjs/interceptors": {
+      "version": "0.37.6",
+      "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.6.tgz",
+      "integrity": "sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@open-draft/deferred-promise": "^2.2.0",
+        "@open-draft/logger": "^0.3.0",
+        "@open-draft/until": "^2.0.0",
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.3",
+        "strict-event-emitter": "^0.5.1"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1624,6 +1828,31 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@open-draft/deferred-promise": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
+      "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@open-draft/logger": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
+      "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.0"
+      }
+    },
+    "node_modules/@open-draft/until": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
+      "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@parcel/watcher": {
       "version": "2.5.1",
       "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
@@ -3123,6 +3352,13 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@types/cookie": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+      "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/estree": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -3180,6 +3416,13 @@
         "undici-types": "~6.20.0"
       }
     },
+    "node_modules/@types/statuses": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz",
+      "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/tough-cookie": {
       "version": "4.0.5",
       "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
@@ -4124,6 +4367,35 @@
       "integrity": "sha512-DJqqQD3XcsaQcQ1s+iE2jDUZmmQpXwHiR6fCAim/w87luaW+vmLY8fMlrdkmRwzaFXhkxf3rqPCR59tKVv1MDw==",
       "license": "MIT"
     },
+    "node_modules/ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.21.3"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ansi-escapes/node_modules/type-fest": {
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -4570,6 +4842,84 @@
         "url": "https://paulmillr.com/funding/"
       }
     },
+    "node_modules/cli-width": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+      "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/cliui/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cliui/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -4640,6 +4990,16 @@
       "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
       "license": "MIT"
     },
+    "node_modules/cookie": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/copy-anything": {
       "version": "3.0.5",
       "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
@@ -5890,6 +6250,16 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
     "node_modules/get-intrinsic": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -6022,6 +6392,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/graphql": {
+      "version": "16.10.0",
+      "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz",
+      "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
+      }
+    },
     "node_modules/has-bigints": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -6106,6 +6486,13 @@
         "he": "bin/he"
       }
     },
+    "node_modules/headers-polyfill": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
+      "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/hookable": {
       "version": "5.5.3",
       "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
@@ -6514,6 +6901,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-node-process": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
+      "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -7447,12 +7841,80 @@
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "license": "MIT"
     },
+    "node_modules/msw": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.3.tgz",
+      "integrity": "sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "@bundled-es-modules/cookie": "^2.0.1",
+        "@bundled-es-modules/statuses": "^1.0.1",
+        "@bundled-es-modules/tough-cookie": "^0.1.6",
+        "@inquirer/confirm": "^5.0.0",
+        "@mswjs/interceptors": "^0.37.0",
+        "@open-draft/deferred-promise": "^2.2.0",
+        "@open-draft/until": "^2.1.0",
+        "@types/cookie": "^0.6.0",
+        "@types/statuses": "^2.0.4",
+        "graphql": "^16.8.1",
+        "headers-polyfill": "^4.0.2",
+        "is-node-process": "^1.2.0",
+        "outvariant": "^1.4.3",
+        "path-to-regexp": "^6.3.0",
+        "picocolors": "^1.1.1",
+        "strict-event-emitter": "^0.5.1",
+        "type-fest": "^4.26.1",
+        "yargs": "^17.7.2"
+      },
+      "bin": {
+        "msw": "cli/index.js"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mswjs"
+      },
+      "peerDependencies": {
+        "typescript": ">= 4.8.x"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/msw/node_modules/type-fest": {
+      "version": "4.37.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz",
+      "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/muggle-string": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
       "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
       "license": "MIT"
     },
+    "node_modules/mute-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
+      "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
     "node_modules/mz": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
@@ -7747,6 +8209,13 @@
       "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==",
       "license": "MIT"
     },
+    "node_modules/outvariant": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
+      "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/p-limit": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -7891,6 +8360,13 @@
         "node": ">=16 || 14 >=14.17"
       }
     },
+    "node_modules/path-to-regexp": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
+      "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/pathe": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
@@ -8482,6 +8958,19 @@
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
       "license": "MIT"
     },
+    "node_modules/psl": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+      "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "punycode": "^2.3.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/lupomontero"
+      }
+    },
     "node_modules/punycode": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -8517,6 +9006,13 @@
       ],
       "license": "MIT"
     },
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -8749,6 +9245,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/requireindex": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
@@ -8759,6 +9265,13 @@
         "node": ">=0.10.5"
       }
     },
+    "node_modules/requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/resize-observer-polyfill": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -9220,6 +9733,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/std-env": {
       "version": "3.8.1",
       "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz",
@@ -9241,6 +9764,13 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/strict-event-emitter": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
+      "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/string-width": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -10129,6 +10659,17 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -10861,6 +11402,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/yallist": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -10879,6 +11430,70 @@
         "node": ">= 14"
       }
     },
+    "node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/yargs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/yocto-queue": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -10902,6 +11517,19 @@
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
+    },
+    "node_modules/yoctocolors-cjs": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+      "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     }
   }
 }
diff --git a/frontend/package.json b/frontend/package.json
index a31e4aad3..b1031f1e3 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -94,9 +94,9 @@
     "eslint-plugin-playwright": "^2.1.0",
     "eslint-plugin-testing-library": "^7.1.1",
     "eslint-plugin-vue": "^10.0.0",
-    "vue-eslint-parser": "^10.1.1",
     "jsdom": "^26.0.0",
     "license-checker-rseidelsohn": "^4.4.2",
+    "msw": "^2.7.3",
     "pinia": "^3.0.1",
     "postcss": "^8.5.3",
     "prettier": "^3.5.3",
@@ -104,7 +104,8 @@
     "sass": "^1.85.0",
     "typescript": "~5.8.2",
     "typescript-eslint": "^8.26.1",
-    "vitest": "^3.0.8"
+    "vitest": "^3.0.8",
+    "vue-eslint-parser": "^10.1.1"
   },
   "overrides": {
     "vite": {
diff --git a/frontend/src/components/ActiveCitations.spec.ts b/frontend/src/components/ActiveCitations.spec.ts
index 77cbf2881..de7158e8c 100644
--- a/frontend/src/components/ActiveCitations.spec.ts
+++ b/frontend/src/components/ActiveCitations.spec.ts
@@ -1,4 +1,4 @@
-import { describe, expect, it } from 'vitest'
+import { describe, expect, it, beforeAll, afterAll } from 'vitest'
 import { userEvent } from '@testing-library/user-event'
 import { fireEvent, render, screen, waitFor } from '@testing-library/vue'
 import ActiveCitations from '@/components/ActiveCitations.vue'
@@ -7,6 +7,25 @@ import { type CitationType } from '@/domain/citationType'
 import { type Court, type DocumentType, type DocumentUnit } from '@/domain/documentUnit'
 import { onSearchShortcutDirective } from '@/utils/onSearchShortcutDirective'
 import { createTestingPinia } from '@pinia/testing'
+import { http, HttpResponse } from 'msw'
+import { setupServer } from 'msw/node'
+
+const server = setupServer(
+  http.get('/api/lookup-tables/document-types', () =>
+    HttpResponse.json({
+      documentTypes: [
+        {
+          abbreviation: 'VE',
+          name: 'Verwaltungsvereinbarung',
+        },
+      ],
+    }),
+  ),
+)
+
+const serverError = setupServer(
+  http.get('/api/lookup-tables/document-types', () => HttpResponse.error()),
+)
 
 function renderComponent(activeCitations?: ActiveCitation[]) {
   const user = userEvent.setup()
@@ -62,7 +81,7 @@ function generateActiveCitation(options?: {
     decisionDate: options?.decisionDate ?? '2022-02-01',
     fileNumber: options?.fileNumber ?? 'test fileNumber',
     documentType: options?.documentType ?? {
-      jurisShortcut: 'documentTypeShortcut1',
+      abbreviation: 'documentTypeShortcut1',
       label: 'documentType1',
     },
     citationType: options?.citationStyle ?? {
@@ -74,6 +93,9 @@ function generateActiveCitation(options?: {
 }
 
 describe('active citations', () => {
+  beforeAll(() => server.listen())
+  afterAll(() => server.close())
+
   it('renders empty active citation in edit mode, when no activeCitations in list', async () => {
     renderComponent()
     expect((await screen.findAllByLabelText('Listen Eintrag')).length).toBe(1)
@@ -165,16 +187,16 @@ describe('active citations', () => {
     const itemHeader = screen.getByTestId('list-entry-0')
     await user.click(itemHeader)
 
-    await user.type(await screen.findByLabelText('Dokumenttyp Aktivzitierung'), 'VR')
+    await user.type(await screen.findByLabelText('Dokumenttyp Aktivzitierung'), 'VE')
     await waitFor(() => {
-      expect(screen.getAllByLabelText('dropdown-option')[0]).toHaveTextContent('VR')
+      expect(screen.getAllByLabelText('dropdown-option')[0]).toHaveTextContent('VE')
     })
     const dropdownItems = screen.getAllByLabelText('dropdown-option')
     await user.click(dropdownItems[0])
     const button = screen.getByLabelText('Aktivzitierung speichern')
     await user.click(button)
 
-    expect(screen.getByText(/VR/)).toBeVisible()
+    expect(screen.getByText(/Verwaltungsvereinbarung/)).toBeVisible()
   })
 
   it('correctly updates value court input', async () => {
@@ -410,3 +432,20 @@ describe('active citations', () => {
     })
   })
 })
+
+describe('active citations errors', () => {
+  beforeAll(() => serverError.listen())
+  afterAll(() => serverError.close())
+
+  it('do not show error messages when endpoint for document-type has http error', async () => {
+    const { user } = renderComponent([generateActiveCitation()])
+
+    const itemHeader = screen.getByTestId('list-entry-0')
+    await user.click(itemHeader)
+
+    await user.type(await screen.findByLabelText('Dokumenttyp Aktivzitierung'), 'VE')
+    await waitFor(() => {
+      expect(screen.queryByText(/Verwaltungsvereinbarung/)).not.toBeInTheDocument()
+    })
+  })
+})
diff --git a/frontend/src/components/input/types.ts b/frontend/src/components/input/types.ts
index c627c5757..501e4c067 100644
--- a/frontend/src/components/input/types.ts
+++ b/frontend/src/components/input/types.ts
@@ -1,3 +1,4 @@
+import type { UseFetchReturn } from '@vueuse/core'
 import { LabelPosition } from '@/components/input/InputField.vue'
 import LegalPeriodical from '@/domain/legalPeriodical'
 import type { Court, DocumentType } from '@/domain/documentUnit'
@@ -138,7 +139,9 @@ export type ComboboxItem = {
 }
 
 export interface ComboboxAttributes extends BaseInputAttributes {
-  itemService: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
+  itemService: (
+    filter: Ref<string | undefined>,
+  ) => ComboboxResult<ComboboxItem[]> | UseFetchReturn<ComboboxItem[]>
   placeholder?: string
   manualEntry?: boolean
   noClear?: boolean
diff --git a/frontend/src/domain/documentUnit.ts b/frontend/src/domain/documentUnit.ts
index 86d408f1f..df31dbb84 100644
--- a/frontend/src/domain/documentUnit.ts
+++ b/frontend/src/domain/documentUnit.ts
@@ -7,7 +7,7 @@ import type NormReference from './normReference'
 
 export type DocumentType = {
   uuid?: string
-  jurisShortcut: string
+  abbreviation: string
   label: string
 }
 
diff --git a/frontend/src/services/comboboxItemService.spec.ts b/frontend/src/services/comboboxItemService.spec.ts
index 2ce226ebf..db4a78f7a 100644
--- a/frontend/src/services/comboboxItemService.spec.ts
+++ b/frontend/src/services/comboboxItemService.spec.ts
@@ -1,25 +1,9 @@
 import { describe, expect, it } from 'vitest'
-import ComboboxItemService from '@/services/comboboxItemService.ts'
 import { ref } from 'vue'
+import ComboboxItemService from '@/services/comboboxItemService.ts'
 import type { ComboboxItem } from '@/components/input/types.ts'
 
 describe('comboboxItemService', () => {
-  it('getDocumentTypes.data', () => {
-    const documentTypes = ComboboxItemService.getDocumentTypes(ref(''))
-
-    expect(documentTypes.data.value as ComboboxItem[]).toEqual(
-      expect.arrayContaining([<ComboboxItem>{ label: 'VR', value: { label: 'VR' } }]),
-    )
-  })
-
-  it('getDocumentTypes.execute', async () => {
-    const documentTypes = ComboboxItemService.getDocumentTypes(ref(''))
-
-    const executionResult = await documentTypes.execute()
-
-    expect(executionResult.data.value).toEqual(documentTypes.data.value)
-  })
-
   it('getFieldOfLawSearchByIdentifier.data', () => {
     const fieldsOfLaw = ComboboxItemService.getFieldOfLawSearchByIdentifier(ref(''))
     expect(fieldsOfLaw.data.value as ComboboxItem[]).toEqual(
diff --git a/frontend/src/services/comboboxItemService.ts b/frontend/src/services/comboboxItemService.ts
index 1ad872590..e7e04cb7e 100644
--- a/frontend/src/services/comboboxItemService.ts
+++ b/frontend/src/services/comboboxItemService.ts
@@ -1,18 +1,67 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    return (responseData as { abbreviation: string; name: string }[]).map((item) => ({
+      label: item.name,
+      value: {
+        label: item.name,
+        abbreviation: item.abbreviation,
+      },
+      additionalInformation: item.abbreviation,
+    }))
+  }
+  return []
+}
+
+function fetchFromEndpoint(endpoint: Endpoint, filter: Ref<string | undefined>, size?: number) {
+  const requestParams = computed<{ searchQuery?: string; sz?: string }>(() => ({
+    ...(filter.value ? { searchQuery: filter.value } : {}),
+    ...(size != undefined ? { sz: size.toString(), pg: '0' } : {}),
+  }))
+  const url = computed(() => {
+    const queryParams = new URLSearchParams(requestParams.value).toString()
+    return `${API_PREFIX}${endpoint}?${queryParams}`
+  })
+
+  return useFetch<ComboboxItem[]>(url, {
+    afterFetch: (ctx) => {
+      ctx.data = formatDropdownItems(ctx.data.documentTypes, endpoint)
+      return ctx
+    },
+    onFetchError: ({ response }) => ({
+      status: response?.status,
+      error: {
+        title: errorMessages.SERVER_ERROR_DROPDOWN.title,
+        description: errorMessages.SERVER_ERROR_DROPDOWN.description,
+      },
+    }),
+  }).json()
+}
 
 export type ComboboxItemService = {
   getLegalPeriodicals: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
   getCourts: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
-  getDocumentTypes: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
+  getDocumentTypes: (filter: Ref<string | undefined>) => UseFetchReturn<ComboboxItem[]>
   getRisAbbreviations: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
   getActiveReferenceTypes: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
   getCitationTypes: (filter: Ref<string | undefined>) => ComboboxResult<ComboboxItem[]>
@@ -92,40 +141,8 @@ const service: ComboboxItemService = {
     }
     return result
   },
-  getDocumentTypes: (filter: Ref<string | undefined>) => {
-    const documentTypeValues = [
-      { label: 'VR' },
-      { label: 'VE' },
-      { label: 'VV' },
-      { label: 'ST' },
-    ] as DocumentType[]
-    const documentTypes = ref(
-      documentTypeValues.map((dt) => <ComboboxItem>{ label: dt.label, value: dt }),
-    )
-    const execute = async () => {
-      if (filter?.value && filter.value.length > 0) {
-        const filteredItems = documentTypeValues.filter((item) =>
-          item.label.toLowerCase().startsWith((filter.value as string).toLowerCase()),
-        )
-        const filteredComboBoxItems = filteredItems.map(
-          (item) => <ComboboxItem>{ label: item.label, value: item },
-        )
-        documentTypes.value = [...filteredComboBoxItems]
-      } else {
-        documentTypes.value = documentTypeValues.map(
-          (dt) => <ComboboxItem>{ label: dt.label, value: dt },
-        )
-      }
-      return service.getDocumentTypes(filter)
-    }
-    const result: ComboboxResult<ComboboxItem[]> = {
-      data: documentTypes,
-      execute: execute,
-      canAbort: computed(() => false),
-      abort: () => {},
-    }
-    return result
-  },
+  getDocumentTypes: (filter: Ref<string | undefined>) =>
+    fetchFromEndpoint(Endpoint.documentTypes, filter),
   getRisAbbreviations: (filter: Ref<string | undefined>) => {
     const risAbbreviationValues = [
       { abbreviation: 'SGB 5', officialLongTitle: 'Sozialgesetzbuch (SGB) Fünftes Buch (V)' },
diff --git a/frontend/src/services/documentUnitService.ts b/frontend/src/services/documentUnitService.ts
index 1e1bc8739..7b23e5f2b 100644
--- a/frontend/src/services/documentUnitService.ts
+++ b/frontend/src/services/documentUnitService.ts
@@ -158,8 +158,8 @@ const service: DocumentUnitService = {
             },
             decisionDate: '2022-02-01',
             documentType: {
-              jurisShortcut: 'documentTypeShortcut1',
-              label: 'documentType1',
+              abbreviation: 'VV',
+              label: 'Verwaltungsvorschrift',
             },
             fileNumber: 'test fileNumber1',
           }),


Reviews:
user: login: andreas-deazevedo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-13T16:29:45Z
user: login: reckseba
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T08:41:12Z
user: login: reckseba
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T08:49:43Z
user: login: reckseba
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T08:50:38Z
user: login: reckseba
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T08:58:58Z

Review comments:
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
path: frontend/src/services/comboboxItemService.ts
user: login: andreas-deazevedo
body: I think, having `lookup-tables` in the path is good for organization, it points out, that there is main resource for lookup tables - in this case another database schema.

Regarding `document-types` vs. `documenttypes`: I would RESTful Guidelines, e.g. https://restfulapi.net/resource-naming/ (chapter 2.2.3). `document-types` is better readable from my point of view.
created_at: 2025-03-13T12:07:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
path: frontend/src/services/comboboxItemService.ts
user: login: andreas-deazevedo
body: Translation is allright!
created_at: 2025-03-13T12:09:00Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
+    // TODO backend shall return the UUID
path: frontend/src/services/comboboxItemService.ts
user: login: andreas-deazevedo
body: Actually the clue with that is, we do not know yet how to reference those values later in LDML. So not sure, if we need the UUID now. For now, the mapping occurs by value, I guess?
created_at: 2025-03-13T12:10:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
+    // TODO backend shall return the UUID
+    return (responseData as { abbreviation: string; name: string }[]).map((item) => ({
+      label: item.name,
+      value: {
+        label: item.name,
+        abbreviation: item.abbreviation,
+      },
+      additionalInformation: item.abbreviation,
+    }))
+  }
+  return []
+}
+
+// TODO caselaw queryParam is only q
path: frontend/src/services/comboboxItemService.ts
user: login: andreas-deazevedo
body: Well, we can change it. Although `q` is not really an example of self-documentation. 🙂
created_at: 2025-03-13T12:13:41Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
+    // TODO backend shall return the UUID
+    return (responseData as { abbreviation: string; name: string }[]).map((item) => ({
+      label: item.name,
+      value: {
+        label: item.name,
+        abbreviation: item.abbreviation,
+      },
+      additionalInformation: item.abbreviation,
+    }))
+  }
+  return []
+}
+
+// TODO caselaw queryParam is only q
+// TODO bring pagination to backend
path: frontend/src/services/comboboxItemService.ts
user: login: andreas-deazevedo
body: Totally agree and it is super easy to use Pagination with Sping Data JPA. But it is too much for this ticket, I think. Let separate pagination into another ticket.
created_at: 2025-03-13T12:14:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
path: frontend/src/services/comboboxItemService.ts
user: login: reckseba
body: Oh what a lovely resource to point at. Sold!
created_at: 2025-03-14T08:41:12Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
+    // TODO backend shall return the UUID
path: frontend/src/services/comboboxItemService.ts
user: login: reckseba
body: Yes the ComboboxInput component is matching by the label (which is translated from name in our db).

I am fine with to have it like that for now.

It depends on the ldml generation if the UUID is then later needed, to match a lookup table entry exactly. 
created_at: 2025-03-14T08:49:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
+    // TODO backend shall return the UUID
+    return (responseData as { abbreviation: string; name: string }[]).map((item) => ({
+      label: item.name,
+      value: {
+        label: item.name,
+        abbreviation: item.abbreviation,
+      },
+      additionalInformation: item.abbreviation,
+    }))
+  }
+  return []
+}
+
+// TODO caselaw queryParam is only q
path: frontend/src/services/comboboxItemService.ts
user: login: reckseba
body: I like ours more. Let's keep it.
created_at: 2025-03-14T08:50:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,18 +1,72 @@
+import { useFetch, type UseFetchReturn } from '@vueuse/core'
 import type { Ref } from 'vue'
-import type { ComboboxItem } from '@/components/input/types'
+import { API_PREFIX } from './httpClient'
+import type { ComboboxInputModelType, ComboboxItem } from '@/components/input/types'
 import LegalPeriodical from '@/domain/legalPeriodical.ts'
-import type { Court, DocumentType } from '@/domain/documentUnit'
+import type { Court } from '@/domain/documentUnit'
 import type { ComboboxResult } from '@/domain/comboboxResult.ts'
 import type { CitationType } from '@/domain/citationType'
 import { computed, ref } from 'vue'
 import type { NormAbbreviation } from '@/domain/normAbbreviation.ts'
 import ActiveReference, { ActiveReferenceType } from '@/domain/activeReference.ts'
 import type { FieldOfLaw } from '@/domain/fieldOfLaw'
+import errorMessages from '@/i18n/errors.json'
+
+// TODO caselaw defines it /documenttypes
+enum Endpoint {
+  documentTypes = 'lookup-tables/document-types',
+}
+
+function formatDropdownItems(
+  responseData: ComboboxInputModelType[],
+  endpoint: Endpoint,
+): ComboboxItem[] {
+  if (endpoint == Endpoint.documentTypes) {
+    // TODO I needed to translate here because BE calls it name. FE calls it label.
+    // TODO backend shall return the UUID
+    return (responseData as { abbreviation: string; name: string }[]).map((item) => ({
+      label: item.name,
+      value: {
+        label: item.name,
+        abbreviation: item.abbreviation,
+      },
+      additionalInformation: item.abbreviation,
+    }))
+  }
+  return []
+}
+
+// TODO caselaw queryParam is only q
+// TODO bring pagination to backend
path: frontend/src/services/comboboxItemService.ts
user: login: reckseba
body: Sure. I created a new JIRA ticket fir that matter.
created_at: 2025-03-14T08:58:58Z
author_association: CONTRIBUTOR

PR comments:
user: login: reckseba
created_at: 2025-03-13T11:34:01Z
body: @andreas-deazevedo I left 5 TODO's that needs further discussion. Do you have an opinion on those?
author_association: CONTRIBUTOR
user: login: andreas-deazevedo
created_at: 2025-03-13T12:15:39Z
body: > @andreas-deazevedo I left 5 TODO's that needs further discussion. Do you have an opinion on those?

I hope, I catched them all. 😉 
author_association: CONTRIBUTOR
user: login: reckseba
created_at: 2025-03-14T09:00:56Z
body: > > @andreas-deazevedo I left 5 TODO's that needs further discussion. Do you have an opinion on those?
> 
> I hope, I catched them all. 😉

You sure did, thanks!
author_association: CONTRIBUTOR