diff --git a/pyproject.toml b/pyproject.toml index 1ed81d3..161d781 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-decisions" -version = "0.1.18" +version = "0.1.19" description = "Formal institutional decision lifecycle and reconstruction 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_decisions/__init__.py b/src/govoplan_decisions/__init__.py index 9859bc0..309a549 100644 --- a/src/govoplan_decisions/__init__.py +++ b/src/govoplan_decisions/__init__.py @@ -1,3 +1,3 @@ """GovOPlaN Decisions module.""" -__version__ = "0.1.18" +__version__ = "0.1.19" diff --git a/src/govoplan_decisions/backend/manifest.py b/src/govoplan_decisions/backend/manifest.py index 15a13e7..64bc3cc 100644 --- a/src/govoplan_decisions/backend/manifest.py +++ b/src/govoplan_decisions/backend/manifest.py @@ -36,7 +36,7 @@ from govoplan_decisions.backend.search_source import create_decisions_search_sou MODULE_ID = "decisions" MODULE_NAME = "Decisions" -MODULE_VERSION = "0.1.18" +MODULE_VERSION = "0.1.19" READ_SCOPE = "decisions:decision:read" SENSITIVE_READ_SCOPE = "decisions:decision:read_sensitive" WRITE_SCOPE = "decisions:decision:write" @@ -212,6 +212,40 @@ manifest = ModuleManifest( ), }, }, + translations={ + "de": { + "title": "Datenschutzanfragen zu formellen Entscheidungen", + "summary": ( + "Minimierte Angaben zur erstellenden Person aus unveränderlichen " + "Entscheidungsrevisionen exportieren, ohne geschützte Inhalte offenzulegen." + ), + "body": ( + "Decisions sucht innerhalb des aktiven Mandanten nach exakten Konto-, " + "Mitgliedschafts-, Identitäts- oder ausdrücklich angegebenen Akteurskennungen. " + "Eine optionale Entscheidungskennung schränkt nur diese bereits verifizierte " + "Akteurssuche ein und kann für sich allein keine Entscheidung offenlegen. Der " + "Ausgabedatensatz enthält ausschließlich Revision, Typ, Status, Gültigkeits- und " + "Aufzeichnungszeit sowie die Aktivität der erstellenden Person. Geschützte " + "Begründungen, verfügende Ergebnisse, Bedingungen, Nachweisinhalte und Prüfsummen " + "bleiben ausgeschlossen. Die Historie formeller Entscheidungen ist unveränderlicher " + "rechtlicher und institutioneller Nachweis; deshalb veröffentlicht der Anbieter " + "ausschließlich Aufbewahrungsergebnisse und schreibt keine Revision um." + ), + } + }, + structured_translation_version="1", + structured_translations={ + "de": { + "consequence_classes": { + "export_creator_attribution": ( + "Gibt Lebenszyklus- und Erstellerkontext ohne geschützte Inhalte zurück." + ), + "retain_formal_history": ( + "Bewahrt unveränderliche institutionelle und rechtliche Nachweise auf." + ), + } + } + }, ), DocumentationTopic( id="decisions.formal-outcome", @@ -229,11 +263,36 @@ manifest = ModuleManifest( ), ), metadata={ + "kind": "reference", "help_contexts": [ "decisions.search.result", "decisions.record.filing", ], }, + translations={ + "de": { + "title": "Formelle institutionelle Entscheidungen", + "summary": ( + "Zuständigkeit, Nachweise, Begründung, Ergebnis, Wirkungen und " + "Überprüfungshistorie nachvollziehbar rekonstruieren." + ), + "body": ( + "Decisions bewahrt formelle Ergebnisse als unveränderliche Revisionen auf. " + "Berichtigungen und Widerrufe erzeugen verknüpfte Revisionen; beabsichtigte und " + "beobachtete Wirkungen bleiben für den Abgleich getrennt. Listen und nicht " + "versionierte Detailansichten folgen der in der Titelleiste gewählten Gültigkeits- " + "und Aufzeichnungszeit; exakte Revisionsverweise bleiben exakt und die aktuelle " + "Berechtigungsprüfung gilt unverändert. Ist Records aktiviert, wird nur eine exakte, " + "vollständige Entscheidungsrevision abgelegt, nachdem aktuelle Metadaten- und " + "Leseberechtigungen erneut geprüft wurden. Records bewahrt den prüfsummengebundenen " + "Quellverweis, während Decisions maßgeblich bleibt. Ist Search aktiviert, trägt " + "Decisions ausschließlich wiederaufbaubare Lebenszyklus-, Betreff-, Rechtsgrundlagen-, " + "Wirkungs- und Fallverknüpfungsmetadaten bei. Verfügende Ergebnisse, Begründungen und " + "Bedingungen bleiben ausgeschlossen; vor jeder Offenlegung wird die aktuelle " + "Berechtigung erneut geprüft." + ), + } + }, ), ), architecture=declared_module_architecture( diff --git a/tests/test_documentation.py b/tests/test_documentation.py new file mode 100644 index 0000000..1442572 --- /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_decisions.backend.manifest import manifest + + +class DecisionsDocumentationTests(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_formal_outcome_is_the_field_and_consequence_reference(self) -> None: + topic = next( + item + for item in manifest.documentation + if item.id == "decisions.formal-outcome" + ) + self.assertEqual("reference", topic.metadata.get("kind")) + + +if __name__ == "__main__": + unittest.main()