docs(erp): complete German reference contract
Module Package Release / publish-packages (push) Successful in 10s
Module Package Release / publish-packages (push) Successful in 10s
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "govoplan-erp"
|
name = "govoplan-erp"
|
||||||
version = "0.1.19"
|
version = "0.1.20"
|
||||||
description = "GovOPlaN governed ERP payable export and reconciliation module."
|
description = "GovOPlaN governed ERP payable export and reconciliation module."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from govoplan_core.core.provider_governance import (
|
|||||||
|
|
||||||
|
|
||||||
MODULE_ID = "erp"
|
MODULE_ID = "erp"
|
||||||
MODULE_VERSION = "0.1.19"
|
MODULE_VERSION = "0.1.20"
|
||||||
READ_SCOPE = "erp:payables:read"
|
READ_SCOPE = "erp:payables:read"
|
||||||
PLAN_SCOPE = "erp:payables:plan"
|
PLAN_SCOPE = "erp:payables:plan"
|
||||||
RECONCILE_SCOPE = "erp:bookings:reconcile"
|
RECONCILE_SCOPE = "erp:bookings:reconcile"
|
||||||
@@ -211,6 +211,7 @@ manifest = ModuleManifest(
|
|||||||
"body": "ERP verantwortet Produktprofile, Zuordnung und Transportpläne, Korrelation sowie externe Buchungsbeobachtungen. Procurement, Payments und Ledger bleiben für Freigaben, Verbindlichkeiten, Zahlungen und Buchhaltungsprojektionen zuständig. Ein Übergabeplan ist kein Buchungsnachweis; eine unkonfigurierte Anbieterdeklaration ist keine produktive Integration.",
|
"body": "ERP verantwortet Produktprofile, Zuordnung und Transportpläne, Korrelation sowie externe Buchungsbeobachtungen. Procurement, Payments und Ledger bleiben für Freigaben, Verbindlichkeiten, Zahlungen und Buchhaltungsprojektionen zuständig. Ein Übergabeplan ist kein Buchungsnachweis; eine unkonfigurierte Anbieterdeklaration ist keine produktive Integration.",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
metadata={"kind": "reference"},
|
||||||
order=90,
|
order=90,
|
||||||
),
|
),
|
||||||
DocumentationTopic(
|
DocumentationTopic(
|
||||||
@@ -276,6 +277,31 @@ manifest = ModuleManifest(
|
|||||||
"Reversals remain linked outcomes rather than destructive status replacement.",
|
"Reversals remain linked outcomes rather than destructive status replacement.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
structured_translation_version="1",
|
||||||
|
structured_translations={
|
||||||
|
"de": {
|
||||||
|
"prerequisites": [
|
||||||
|
"Das fachlich verantwortliche Finanzmodul liefert eine freigegebene unveränderliche Verbindlichkeitsrevision.",
|
||||||
|
"Eine administrierende Person hat Zielschema und Rohstatuszuordnung geprüft.",
|
||||||
|
"Die Verbindungsreferenz wird über eine installationsverantwortete Berechtigungsgrenze aufgelöst.",
|
||||||
|
],
|
||||||
|
"steps": [
|
||||||
|
"Exakte kanonische Übergabenutzdaten und Planprüfsummen erzeugen und prüfen.",
|
||||||
|
"Nur über einen getrennt am Ziel geprüften Adapter versenden.",
|
||||||
|
"Die Buchung nach Erfolg, Zeitüberschreitung oder Wiederholung über die stabile Plankorrelation lesen.",
|
||||||
|
"Die deterministische Abgleichentscheidung erfassen, abwarten oder isolieren.",
|
||||||
|
],
|
||||||
|
"limitations": [
|
||||||
|
"Diese Version wählt weder ERP-Produkt, Schema, Endpunkt noch Transport aus.",
|
||||||
|
"Pläne können nicht versenden und Beobachtungen werden von diesem Modul nicht gespeichert.",
|
||||||
|
],
|
||||||
|
"consequences": [
|
||||||
|
"Eine Änderung an Verbindlichkeit oder Zuordnung erzeugt einen neuen Plan und eine neue Idempotenzidentität.",
|
||||||
|
"Eine Zeitüberschreitung bedeutet weder Erfolg noch Fehlschlag.",
|
||||||
|
"Stornos bleiben verknüpfte Ergebnisse, statt den ursprünglichen Status destruktiv zu ersetzen.",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
order=100,
|
order=100,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from govoplan_core.core.modules import documentation_structured_translation_issues
|
||||||
|
from govoplan_erp.backend.manifest import manifest
|
||||||
|
|
||||||
|
|
||||||
|
def test_erp_german_reference_contract_is_complete() -> None:
|
||||||
|
topics = {topic.id: topic for topic in manifest.documentation}
|
||||||
|
assert topics["erp.boundary"].metadata["kind"] == "reference"
|
||||||
|
workflow = topics["erp.payable-reconciliation"]
|
||||||
|
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"))
|
||||||
@@ -129,7 +129,7 @@ def test_unknown_or_wrong_plan_observation_is_quarantined() -> None:
|
|||||||
|
|
||||||
def test_manifest_documents_unconfigured_provider_and_german_workflow() -> None:
|
def test_manifest_documents_unconfigured_provider_and_german_workflow() -> None:
|
||||||
manifest = get_manifest()
|
manifest = get_manifest()
|
||||||
assert manifest.version == "0.1.19"
|
assert manifest.version == "0.1.20"
|
||||||
assert manifest.external_providers[0].id == "erp.payables_target"
|
assert manifest.external_providers[0].id == "erp.payables_target"
|
||||||
assert manifest.architecture is not None
|
assert manifest.architecture is not None
|
||||||
assert manifest.architecture.target_tested_providers == ()
|
assert manifest.architecture.target_tested_providers == ()
|
||||||
|
|||||||
Reference in New Issue
Block a user