diff --git a/pyproject.toml b/pyproject.toml index ae2d98d..9eb8271 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-dms" -version = "0.1.19" +version = "0.1.20" description = "GovOPlaN document-management integration module." readme = "README.md" requires-python = ">=3.12" @@ -29,4 +29,3 @@ pythonpath = ["src"] [tool.ruff] line-length = 100 target-version = "py312" - diff --git a/src/govoplan_dms/__init__.py b/src/govoplan_dms/__init__.py index aab1c3e..21fc697 100644 --- a/src/govoplan_dms/__init__.py +++ b/src/govoplan_dms/__init__.py @@ -1,4 +1,3 @@ """GovOPlaN DMS integration module.""" -__version__ = "0.1.19" - +__version__ = "0.1.20" diff --git a/src/govoplan_dms/backend/manifest.py b/src/govoplan_dms/backend/manifest.py index 3810b8c..a532eda 100644 --- a/src/govoplan_dms/backend/manifest.py +++ b/src/govoplan_dms/backend/manifest.py @@ -33,7 +33,7 @@ from govoplan_dms.backend.dvelop_d3 import ( MODULE_ID = "dms" -MODULE_VERSION = "0.1.19" +MODULE_VERSION = "0.1.20" READ_SCOPE = "dms:integration:read" ADMIN_SCOPE = "dms:integration:admin" D3_ARCHIVE_CAPABILITY = record_archive_capability(DVELOP_D3_PROVIDER_ID) @@ -176,6 +176,7 @@ manifest = ModuleManifest( "body": "DMS verantwortet produktspezifische Repository-Erkennung, Quellzuordnung, Versions- und Referenzsemantik sowie Zielbelege. Files bleibt für Binärdaten zuständig; Records verwaltet Veraktung, Aufbewahrung, Sperren, Aussonderung und Archivübergabe. Eine Anbieterdeklaration beweist weder Gesundheit noch Konformität eines konfigurierten Ziels.", } }, + metadata={"kind": "reference"}, order=100, ), DocumentationTopic( @@ -223,6 +224,31 @@ manifest = ModuleManifest( "No secret is included in plans, diagnostics, or retained evidence.", ], }, + structured_translation_version="1", + structured_translations={ + "de": { + "prerequisites": [ + "Ein d.velop-d3-Mandant und ein DMSApp-Endpunkt sind verfügbar.", + "Die Mandantenadministration hat die Quellzuordnung erstellt und geprüft.", + "Die Authentifizierung liegt in einem bereichsbegrenzten Access-Berechtigungsnachweis.", + ], + "steps": [ + "Vorabprüfung für Repository und Objektdefinitionen ausführen.", + "Konfigurierte Quellkategorie, Quell-ID und Mapping-Revision prüfen.", + "Den prüfsummengebundenen Ablageplan ohne Ausführung erzeugen und vergleichen.", + "Nachweise zu Zielverwahrung, Abgleich und Wiederherstellung abschließen, bevor die Übergabe aktiviert wird.", + ], + "limitations": [ + "Diese Version aktiviert keine reale Records-Übergabe.", + "Die Repository-Erkennung allein beweist weder Quellzuordnung noch Archivverwahrung.", + ], + "consequences": [ + "Eine geänderte Mapping-Revision macht einen früheren Plan ungültig.", + "Eine Zeitüberschreitung bedeutet niemals Erfolg und erfordert einen Zielabgleich.", + "Pläne, Diagnosen und aufbewahrte Nachweise enthalten keine Geheimnisse.", + ], + } + }, order=110, ), ), diff --git a/tests/test_documentation.py b/tests/test_documentation.py new file mode 100644 index 0000000..923f416 --- /dev/null +++ b/tests/test_documentation.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from govoplan_core.core.modules import documentation_structured_translation_issues +from govoplan_dms.backend.manifest import manifest + + +def test_dms_german_reference_contract_is_complete() -> None: + topics = {topic.id: topic for topic in manifest.documentation} + assert topics["dms.boundary"].metadata["kind"] == "reference" + workflow = topics["dms.dvelop-d3"] + assert workflow.metadata["kind"] == "workflow" + assert workflow.structured_translation_version == "1" + assert "de" in workflow.structured_translations + assert documentation_structured_translation_issues(workflow) == () + for topic in topics.values(): + assert all(topic.translations["de"].get(key) for key in ("title", "summary", "body")) diff --git a/tests/test_dvelop_d3.py b/tests/test_dvelop_d3.py index 5722464..e5dac59 100644 --- a/tests/test_dvelop_d3.py +++ b/tests/test_dvelop_d3.py @@ -112,7 +112,7 @@ def test_profile_rejects_origin_paths_and_embedded_credentials() -> None: def test_manifest_declares_d3_without_claiming_target_test() -> None: manifest = get_manifest() - assert manifest.version == "0.1.19" + assert manifest.version == "0.1.20" assert manifest.external_providers[0].id == "dms.dvelop_d3" assert manifest.architecture is not None assert manifest.architecture.target_tested_providers == ()