From 49f9cec481c7234ca1621e3af03be6b3b214dbaf Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Sat, 22 Aug 2026 20:25:21 +0200 Subject: [PATCH] docs(mandates): complete German public reference --- pyproject.toml | 4 +- src/govoplan_mandates/__init__.py | 2 +- src/govoplan_mandates/backend/manifest.py | 52 ++++++++++++++++++++++- tests/test_documentation.py | 29 +++++++++++++ 4 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 tests/test_documentation.py diff --git a/pyproject.toml b/pyproject.toml index ab7b745..9be0fb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-mandates" -version = "0.1.18" +version = "0.1.19" description = "Effective institutional mandate, jurisdiction, and authority lifecycle for GovOPlaN." readme = "README.md" requires-python = ">=3.12" authors = [{ name = "GovOPlaN" }] -dependencies = ["govoplan-core>=0.1.18"] +dependencies = ["govoplan-core>=0.1.37"] [tool.setuptools.packages.find] where = ["src"] diff --git a/src/govoplan_mandates/__init__.py b/src/govoplan_mandates/__init__.py index 752cfd9..247fe96 100644 --- a/src/govoplan_mandates/__init__.py +++ b/src/govoplan_mandates/__init__.py @@ -1,3 +1,3 @@ """GovOPlaN institutional mandates module.""" -__version__ = "0.1.18" +__version__ = "0.1.19" diff --git a/src/govoplan_mandates/backend/manifest.py b/src/govoplan_mandates/backend/manifest.py index 3de99a4..937326e 100644 --- a/src/govoplan_mandates/backend/manifest.py +++ b/src/govoplan_mandates/backend/manifest.py @@ -30,7 +30,7 @@ from govoplan_mandates.backend.service import SqlMandateResolver MODULE_ID = "mandates" MODULE_NAME = "Mandates" -MODULE_VERSION = "0.1.18" +MODULE_VERSION = "0.1.19" READ_SCOPE = "mandates:definition:read" WRITE_SCOPE = "mandates:definition:write" ADMIN_SCOPE = "mandates:definition:admin" @@ -167,6 +167,38 @@ manifest = ModuleManifest( "exclude_mandate_payload": "Does not infer or export subjects from authority definitions.", }, }, + translations={ + "de": { + "title": "Datenschutzanfragen zu Mandaten", + "summary": ( + "Aktivitäten von Mandatsautorinnen und -autoren exportieren, ohne " + "Personen aus beliebigen Zuständigkeitsinhalten abzuleiten." + ), + "body": ( + "Mandates korreliert ausschließlich eine exakte mandantengebundene Kontokennung " + "und kann eine bereits verifizierte Suche auf ein Mandat oder eine Revision " + "eingrenzen. Ausgegeben werden minimierte Zuordnungsdaten mit Revision, Status, " + "Gültigkeits- und Aufzeichnungszeit. Der frei strukturierte Mandatsinhalt, " + "Rechtsgrundlagen, Organisations- und Funktionsverweise, Zuständigkeitskriterien, " + "Änderungsgründe und Konfliktverweise werden weder zur Identitätssuche verwendet " + "noch exportiert. Die Mandatshistorie belegt institutionelle Zuständigkeit und " + "bleibt unveränderlicher Nachweis, statt automatisch gelöscht zu werden." + ), + } + }, + structured_translation_version="1", + structured_translations={ + "de": { + "consequence_classes": { + "export_mandate_attribution": ( + "Gibt minimierte Aktivitäten aus unveränderlichen Revisionen zurück." + ), + "exclude_mandate_payload": ( + "Leitet keine betroffenen Personen aus Zuständigkeitsdefinitionen ab und exportiert diese Inhalte nicht." + ), + } + } + }, ), DocumentationTopic( id="mandates.definition-and-resolution", @@ -187,6 +219,24 @@ manifest = ModuleManifest( kind="repository", ), ), + metadata={"kind": "reference"}, + translations={ + "de": { + "title": "Institutionelle Mandate", + "summary": ( + "Zuständigkeit, Hoheitsbereich, Rechtsgrundlage und Nachweise " + "definieren und wirksam auflösen." + ), + "body": ( + "Mandates speichert unveränderliche Revisionen und ermittelt die eine wirksame " + "Zuständigkeit für eine Aufgabe. Bei widersprüchlicher oder fehlender Zuständigkeit " + "wird sicher abgebrochen. Folgeprozesse bewahren die exakte Revision und ihren " + "Nachweis. Katalogansichten folgen der in der Titelleiste gewählten Gültigkeits- und " + "Aufzeichnungszeit; ausdrücklich angegebene Auflösungszeiten haben Vorrang und die " + "aktuelle Berechtigungsprüfung gilt unverändert." + ), + } + }, ), ), architecture=declared_module_architecture( diff --git a/tests/test_documentation.py b/tests/test_documentation.py new file mode 100644 index 0000000..9550e38 --- /dev/null +++ b/tests/test_documentation.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +import unittest + +from govoplan_core.core.modules import documentation_structured_translation_issues +from govoplan_mandates.backend.manifest import manifest + + +class MandatesDocumentationTests(unittest.TestCase): + def test_public_topics_have_complete_german_reference_content(self) -> None: + self.assertEqual(2, len(manifest.documentation)) + for topic in manifest.documentation: + translation = topic.translations.get("de", {}) + self.assertTrue( + all(translation.get(key) for key in ("title", "summary", "body")) + ) + self.assertEqual((), documentation_structured_translation_issues(topic)) + + def test_definition_topic_is_the_field_and_consequence_reference(self) -> None: + topic = next( + item + for item in manifest.documentation + if item.id == "mandates.definition-and-resolution" + ) + self.assertEqual("reference", topic.metadata.get("kind")) + + +if __name__ == "__main__": + unittest.main()