feat: add governed cross-module reporting

This commit is contained in:
2026-08-02 05:29:38 +02:00
parent eba35edd3c
commit 0abcc2455e
21 changed files with 2497 additions and 38 deletions
+47 -18
View File
@@ -31,6 +31,10 @@ from govoplan_core.core.provider_governance import (
ModuleArchitectureDocumentation,
ModuleMaturityEvidence,
)
from govoplan_core.core.reporting import (
CAPABILITY_POLICY_REPORTING_GOVERNANCE,
CAPABILITY_REPORTING_RETENTION,
)
from govoplan_core.core.search import SearchSourceProviderRegistration
from govoplan_core.core.views import ViewSurface
from govoplan_core.db.base import Base
@@ -171,6 +175,13 @@ def _chart_renderer(context: ModuleContext) -> DefaultChartRenderer:
return DefaultChartRenderer()
def _retention(context: ModuleContext):
del context
from govoplan_reporting.backend.retention import ReportingRetentionService
return ReportingRetentionService()
def _tenant_summary(session, tenant_id: str) -> dict[str, int]:
definitions = (
session.query(reporting_models.ReportingDefinitionRevision)
@@ -232,17 +243,21 @@ manifest = ModuleManifest(
CAPABILITY_AUTH_PRINCIPAL_RESOLVER,
CAPABILITY_AUTH_PERMISSION_EVALUATOR,
),
optional_capabilities=(CAPABILITY_DATAFLOW_DATASET_OUTPUT,),
optional_capabilities=(
CAPABILITY_DATAFLOW_DATASET_OUTPUT,
CAPABILITY_POLICY_REPORTING_GOVERNANCE,
),
permissions=PERMISSIONS,
role_templates=ROLE_TEMPLATES,
route_factory=_router,
nav_items=(
NavItem(
path="/reporting",
path="/reports",
label="Reporting",
icon="clipboard-pen-line",
required_any=(READ_SCOPE,),
order=74,
surface_id="reporting.navigation",
),
),
frontend=FrontendModule(
@@ -250,36 +265,31 @@ manifest = ModuleManifest(
package_name="@govoplan/reporting-webui",
routes=(
FrontendRoute(
path="/reporting",
path="/reports",
component="ReportingPage",
required_any=(READ_SCOPE,),
order=74,
surface_id="reporting.workspace",
),
FrontendRoute(
path="/reporting",
component="ReportingPage",
required_any=(READ_SCOPE,),
order=175,
surface_id="reporting.compatibility",
),
),
nav_items=(
NavItem(
path="/reporting",
path="/reports",
label="Reporting",
icon="clipboard-pen-line",
required_any=(READ_SCOPE,),
order=74,
surface_id="reporting.navigation",
),
),
view_surfaces=(
ViewSurface(
id="reporting.navigation",
module_id=MODULE_ID,
kind="navigation",
label="Reporting navigation",
order=10,
),
ViewSurface(
id="reporting.workspace",
module_id=MODULE_ID,
kind="route",
label="Reporting workspace",
order=20,
),
ViewSurface(
id="reporting.parameters",
module_id=MODULE_ID,
@@ -303,6 +313,7 @@ manifest = ModuleManifest(
ModuleInterfaceProvider(name="reporting.runner", version="0.1.0"),
ModuleInterfaceProvider(name="reporting.scheduler", version="0.1.0"),
ModuleInterfaceProvider(name="reporting.chart_renderer", version="0.1.0"),
ModuleInterfaceProvider(name=CAPABILITY_REPORTING_RETENTION, version="1.0.0"),
),
requires_interfaces=(
ModuleInterfaceRequirement(
@@ -311,12 +322,19 @@ manifest = ModuleManifest(
version_max_exclusive="0.2.0",
optional=True,
),
ModuleInterfaceRequirement(
name=CAPABILITY_POLICY_REPORTING_GOVERNANCE,
version_min="1.0.0",
version_max_exclusive="2.0.0",
optional=True,
),
),
capability_factories={
CAPABILITY_REPORTING_REGISTRY: _registry,
CAPABILITY_REPORTING_RUNNER: _runner,
CAPABILITY_REPORTING_SCHEDULER: _scheduler,
CAPABILITY_REPORTING_CHART_RENDERER: _chart_renderer,
CAPABILITY_REPORTING_RETENTION: _retention,
},
capability_documentation={
CAPABILITY_REPORTING_REGISTRY: CapabilityDocumentation(
@@ -339,6 +357,13 @@ manifest = ModuleManifest(
summary="Builds provider-neutral chart models with an accessible tabular fallback.",
contract_version="0.1.0",
),
CAPABILITY_REPORTING_RETENTION: CapabilityDocumentation(
label="Reporting result retention",
summary="Minimizes expired provider-report detail while retaining audit hashes and provenance.",
contract_version="1.0",
documentation_types=("admin",),
audience=("privacy_officer", "operator", "system_admin"),
),
},
search_sources=(
SearchSourceProviderRegistration(
@@ -359,6 +384,8 @@ manifest = ModuleManifest(
reporting_models.ReportingSavedView,
reporting_models.ReportingDefinitionGrant,
reporting_models.ReportingExecution,
reporting_models.ReportingProviderExport,
reporting_models.ReportingProviderExecution,
reporting_models.ReportingDefinitionRevision,
reporting_models.ReportingDefinitionIdentity,
label="Reporting",
@@ -374,6 +401,8 @@ manifest = ModuleManifest(
reporting_models.ReportingDefinitionRevision,
reporting_models.ReportingDefinitionGrant,
reporting_models.ReportingExecution,
reporting_models.ReportingProviderExecution,
reporting_models.ReportingProviderExport,
reporting_models.ReportingSavedView,
reporting_models.ReportingSchedule,
reporting_models.ReportingPublication,