From d0ff2f15100ccb13d4d1323c113d3df2895f4b90 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Wed, 19 Aug 2026 13:33:51 +0200 Subject: [PATCH] Integrate Payments operator WebUI --- packages/govoplan-meta/pyproject.toml | 2 +- tools/checks/check-focused.sh | 6 ++++ tools/checks/check-shared-webui-layouts.py | 1 + tools/checks/check-shared-webui-primitives.py | 8 +++++- .../endpoint-surface-declarations.json | 28 ++++++++----------- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/packages/govoplan-meta/pyproject.toml b/packages/govoplan-meta/pyproject.toml index bfdcb10..754bacd 100644 --- a/packages/govoplan-meta/pyproject.toml +++ b/packages/govoplan-meta/pyproject.toml @@ -57,7 +57,7 @@ full = [ "govoplan-mandates==0.1.18", "govoplan-notifications==0.1.18", "govoplan-parties==0.1.18", - "govoplan-payments==0.1.19", + "govoplan-payments==0.1.20", "govoplan-permits==0.1.18", "govoplan-poll==0.1.18", "govoplan-portal==0.1.18", diff --git a/tools/checks/check-focused.sh b/tools/checks/check-focused.sh index 01b51cb..a8c5e54 100644 --- a/tools/checks/check-focused.sh +++ b/tools/checks/check-focused.sh @@ -103,6 +103,7 @@ PY "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-dashboard/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-postbox/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-portal/tests +"$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-payments/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-forms/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-forms-runtime/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-cases/tests @@ -124,6 +125,11 @@ cd "$ROOT/webui" "$NPM" run test:module-permutations "$NPM" run test:conformance +"$WEBUI_BIN/tsc" -p /mnt/DATA/git/govoplan-payments/webui/tsconfig.json + +cd /mnt/DATA/git/govoplan-payments/webui +"$NPM" run test:interface-pattern + cd /mnt/DATA/git/govoplan-dataflow/webui "$NPM" run test:structure diff --git a/tools/checks/check-shared-webui-layouts.py b/tools/checks/check-shared-webui-layouts.py index 44f6e6d..bc89588 100644 --- a/tools/checks/check-shared-webui-layouts.py +++ b/tools/checks/check-shared-webui-layouts.py @@ -49,6 +49,7 @@ REQUIRED_CONSUMERS = ( pathlib.Path("govoplan-core/webui/src/features/settings/SettingsPage.tsx"), pathlib.Path("govoplan-docs/webui/src/features/docs/DocsPage.tsx"), pathlib.Path("govoplan-mail/webui/src/features/mail/MailBouncePage.tsx"), + pathlib.Path("govoplan-payments/webui/src/features/payments/PaymentsPage.tsx"), ) REQUIRED_WORKSPACE_CONSUMERS = ( pathlib.Path("govoplan-campaign/webui/src/features/campaigns/CampaignWorkspace.tsx"), diff --git a/tools/checks/check-shared-webui-primitives.py b/tools/checks/check-shared-webui-primitives.py index 86807bd..b77ca38 100644 --- a/tools/checks/check-shared-webui-primitives.py +++ b/tools/checks/check-shared-webui-primitives.py @@ -30,6 +30,9 @@ LEGACY_LAYOUT_TOKENS = { "metric-grid", } CENTRAL_COMPONENTS = { + "PageActionBar": pathlib.Path( + "govoplan-core/webui/src/components/PageActionBar.tsx" + ), "ActionToolbar": pathlib.Path( "govoplan-core/webui/src/components/ActionToolbar.tsx" ), @@ -115,6 +118,9 @@ CENTRAL_COMPONENTS = { ), } REQUIRED_CONSUMERS = { + "PageActionBar": ( + pathlib.Path("govoplan-payments/webui/src/features/payments/PaymentsPage.tsx"), + ), "ActionToolbar": ( pathlib.Path("govoplan-core/webui/src/components/WysiwygEditor.tsx"), pathlib.Path("govoplan-calendar/webui/src/features/calendar/CalendarPage.tsx"), @@ -432,7 +438,7 @@ def main() -> int: migrated = ", ".join( f"{name}={usage_counts[name]} files" - for name in ("ActionToolbar", "WorkspaceFrame", "WorkspaceLayout", "FilterBar", "StatePanel", "SelectionList", "CountBadge", "DefinitionPalette", "DefinitionNodeIcon", "FloatingStatus", "ContentSection", "ContentGrid", "FormGrid", "FormSection", "DialogForm", "DialogSection", "MetricGrid", "MetricCard", "DescriptionList") + for name in ("PageActionBar", "ActionToolbar", "WorkspaceFrame", "WorkspaceLayout", "FilterBar", "StatePanel", "SelectionList", "CountBadge", "DefinitionPalette", "DefinitionNodeIcon", "FloatingStatus", "ContentSection", "ContentGrid", "FormGrid", "FormSection", "DialogForm", "DialogSection", "MetricGrid", "MetricCard", "DescriptionList") ) print(f"Shared WebUI primitive contract passed: {migrated}; {len(dialog_exceptions)} reviewed dialog width exceptions; no raw legacy anatomy.") return 0 diff --git a/tools/inventory/endpoint-surface-declarations.json b/tools/inventory/endpoint-surface-declarations.json index 044224b..cb50ea9 100644 --- a/tools/inventory/endpoint-surface-declarations.json +++ b/tools/inventory/endpoint-surface-declarations.json @@ -1147,36 +1147,32 @@ "repository": "govoplan-parties" }, { - "category": "missing_ui", + "category": "ui_reachable", "method": "GET", "path": "/payments/requests", - "rationale": "The first payment vertical slice is capability-first; its guided operator workspace will adopt the centralized layout usage contract.", - "repository": "govoplan-payments", - "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-payments/issues/1" + "rationale": "The Payments workspace lists obligations, preserves stale data on refresh failure, and offers explicit retry.", + "repository": "govoplan-payments" }, { - "category": "missing_ui", + "category": "ui_reachable", "method": "POST", "path": "/payments/requests", - "rationale": "The first payment vertical slice is capability-first; its guided operator workspace will adopt the centralized layout usage contract.", - "repository": "govoplan-payments", - "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-payments/issues/1" + "rationale": "The guided Payments request dialog creates fixed, source-bound obligations with an explicit replay key.", + "repository": "govoplan-payments" }, { - "category": "missing_ui", + "category": "intentionally_headless", "method": "GET", "path": "/payments/requests/{}", - "rationale": "The first payment vertical slice is capability-first; its guided operator workspace will adopt the centralized layout usage contract.", - "repository": "govoplan-payments", - "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-payments/issues/1" + "rationale": "The operator list response already carries the complete detail projection; the single-object endpoint remains available to capability consumers without duplicating a detail fetch in the workspace.", + "repository": "govoplan-payments" }, { - "category": "missing_ui", + "category": "ui_reachable", "method": "POST", "path": "/payments/requests/{}/manual-reconciliations", - "rationale": "The first payment vertical slice is capability-first; its guided operator workspace will adopt the centralized layout usage contract.", - "repository": "govoplan-payments", - "tracking_issue": "https://git.add-ideas.de/GovOPlaN/govoplan-payments/issues/1" + "rationale": "The separate manual reconciliation dialog fixes amount and currency and captures transaction and immutable evidence references.", + "repository": "govoplan-payments" }, { "category": "intentionally_headless",