From faf6b3305a8967cc2c81657acacf0f3636390abc Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Sat, 22 Aug 2026 06:50:34 +0200 Subject: [PATCH] docs(tasks): complete German workflow coverage --- package.json | 2 +- pyproject.toml | 2 +- src/govoplan_tasks/__init__.py | 2 +- src/govoplan_tasks/backend/manifest.py | 40 ++++++++++++++++++++++---- tests/test_webui_contract.py | 15 ++++++++++ webui/package.json | 2 +- webui/src/module.ts | 2 +- 7 files changed, 55 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index b7fcf88..6f804a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/tasks", - "version": "0.1.19", + "version": "0.1.20", "private": true, "description": "Governed work items and unified work inbox for GovOPlaN.", "type": "module", diff --git a/pyproject.toml b/pyproject.toml index 4978c78..9b81cdd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-tasks" -version = "0.1.19" +version = "0.1.20" description = "Governed work items and unified work inbox for GovOPlaN." readme = "README.md" requires-python = ">=3.12" diff --git a/src/govoplan_tasks/__init__.py b/src/govoplan_tasks/__init__.py index c355ff8..6a80616 100644 --- a/src/govoplan_tasks/__init__.py +++ b/src/govoplan_tasks/__init__.py @@ -1,3 +1,3 @@ """GovOPlaN Tasks module.""" -__version__ = "0.1.19" +__version__ = "0.1.20" diff --git a/src/govoplan_tasks/backend/manifest.py b/src/govoplan_tasks/backend/manifest.py index 1bdd25e..b69f03c 100644 --- a/src/govoplan_tasks/backend/manifest.py +++ b/src/govoplan_tasks/backend/manifest.py @@ -12,6 +12,7 @@ from govoplan_core.core.module_guards import ( ) from govoplan_core.core.modules import ( CapabilityDocumentation, + DocumentationCondition, DocumentationLink, DocumentationTopic, FrontendModule, @@ -43,7 +44,7 @@ from govoplan_tasks.backend.service import SqlTaskService MODULE_ID = "tasks" MODULE_NAME = "Tasks" -MODULE_VERSION = "0.1.19" +MODULE_VERSION = "0.1.20" READ_SCOPE = "tasks:item:read" WRITE_SCOPE = "tasks:item:write" ADMIN_SCOPE = "tasks:item:admin" @@ -157,6 +158,28 @@ DOCUMENTATION = ( documentation_types=("admin", "user"), audience=("user", "tenant_admin", "operator", "auditor"), related_modules=("core", "workflow_engine", "approvals", "notifications"), + translations={ + "de": { + "title": "Betroffenenanfragen für Aufgaben", + "summary": ( + "Kontobezogene Aufgabendaten und Lebenszykluszuordnungen exportieren, " + "während gemeinsam verantwortete institutionelle Arbeit der fachlichen Prüfung unterliegt." + ), + "body": ( + "Tasks gleicht ausschließlich exakte Konto- und Akteurskennungen innerhalb des aktiven Mandanten ab. " + "Direkt einem Konto zugewiesene Aufgaben tragen begrenzte Angaben zu Titel, Zusammenfassung, erforderlicher " + "Handlung, Lebenszyklusstatus, Fristen, exakter Kontozuweisung, Quellverweisen sowie vom Betroffenen ausgeführten " + "Erstellungs-, Änderungs- oder Abschlussaktivitäten bei. Sichtbarkeit für Gruppen, Rollen, Funktionen oder alle " + "wird nicht aus externen Verzeichnissen abgeleitet; andere Zuweisungsziele bleiben ausgeschlossen. Hat die " + "betroffene Person an einer Aufgabe gehandelt, ohne deren direkte Kontozuweisung zu sein, werden nur minimierte " + "Lebenszykluszuordnung und Quellidentität exportiert. Herkunftsmetadaten, beliebige Metadaten, Anfrage-Hashes, " + "Idempotenzschlüssel und Nutzdaten des Quellmoduls bleiben ausgeschlossen; Quellverweise werden niemals verfolgt. " + "Aufgabenzuordnungen bleiben als unveränderlicher Verantwortungsnachweis erhalten. Die Löschung einer Zuweisung " + "oder von Inhalten erfordert eine manuelle Prüfung durch Quellverantwortliche und Aufbewahrungsstelle, da eine " + "Aufgabe gemeinsam verantwortete institutionelle Arbeit sein kann; der Anbieter nimmt keine automatische Änderung vor." + ), + } + }, metadata={ "help_contexts": [ "tasks.page.inbox", @@ -230,6 +253,12 @@ DOCUMENTATION = ( "views", "dashboard", ), + conditions=( + DocumentationCondition( + required_modules=("tasks",), + required_scopes=(READ_SCOPE,), + ), + ), links=( DocumentationLink( label="Tasks domain", @@ -240,16 +269,17 @@ DOCUMENTATION = ( translations={ "de": { "title": "Gemeinsamer Arbeitsvorrat", - "summary": "Explizite Aufgaben und Arbeitsvorgaenge anderer Module sicher fortsetzen.", + "summary": "Explizite Aufgaben und Arbeitsvorgänge anderer Module sicher fortsetzen.", "body": ( "Der Arbeitsvorrat verbindet explizite Aufgaben mit Arbeitsobjekten aktivierter Module. " - "Jede Quelle behaelt die Verantwortung fuer Befehle und Abschlussstatus. Tasks kopiert " - "keine Workflow-Uebergabe, Postfachnachricht, Freigabe oder Benachrichtigung in einen " - "zweiten Fachzustand. Filter, Fristen, Prioritaeten und Quellverweise helfen beim sicheren Fortsetzen." + "Jede Quelle behält die Verantwortung für Befehle und Abschlussstatus. Tasks kopiert " + "keine Workflow-Übergabe, Postfachnachricht, Freigabe oder Benachrichtigung in einen " + "zweiten Fachzustand. Filter, Fristen, Prioritäten und Quellverweise helfen beim sicheren Fortsetzen." ), } }, metadata={ + "kind": "workflow", "help_contexts": [ "tasks.route.work", "tasks.page.inbox", diff --git a/tests/test_webui_contract.py b/tests/test_webui_contract.py index fb3815f..c28588f 100644 --- a/tests/test_webui_contract.py +++ b/tests/test_webui_contract.py @@ -10,6 +10,21 @@ REPOSITORY_ROOT = Path(__file__).resolve().parents[1] class TasksQuickAccessContractTests(unittest.TestCase): + def test_public_topics_have_complete_german_workflow_and_reference_coverage( + self, + ) -> None: + topics = get_manifest().documentation + kinds = {topic.metadata.get("kind", "system") for topic in topics} + + self.assertEqual(3, len(topics)) + self.assertTrue({"workflow", "reference"}.issubset(kinds)) + for topic in topics: + translation = topic.translations["de"] + self.assertEqual({"title", "summary", "body"}, set(translation)) + self.assertTrue( + all(str(translation[field]).strip() for field in translation) + ) + def test_manifest_declares_typed_work_result_and_help(self) -> None: tool = get_manifest().frontend.quick_access_tools[0] diff --git a/webui/package.json b/webui/package.json index 537605a..099652a 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/tasks-webui", - "version": "0.1.19", + "version": "0.1.20", "private": true, "type": "module", "main": "src/index.ts", diff --git a/webui/src/module.ts b/webui/src/module.ts index 9255646..dac2bd1 100644 --- a/webui/src/module.ts +++ b/webui/src/module.ts @@ -44,7 +44,7 @@ const quickAccessTools: QuickAccessToolsUiCapability = { export const tasksModule: PlatformWebModule = { id: "tasks", label: "i18n:govoplan-tasks.work", - version: "0.1.19", + version: "0.1.20", dependencies: ["access"], optionalDependencies: ["idm", "organizations", "workflow_engine", "workflow", "notifications", "postbox", "approvals", "views", "dashboard", "search"], translations: generatedTranslations,