feat(decisions): add governed DSAR coverage
This commit is contained in:
@@ -22,6 +22,10 @@ from govoplan_core.core.provider_governance import declared_module_architecture
|
||||
from govoplan_core.core.search import SearchSourceProviderRegistration
|
||||
from govoplan_core.db.base import Base
|
||||
from govoplan_decisions.backend.db import models as decision_models
|
||||
from govoplan_decisions.backend.dsar_provider import (
|
||||
DECISIONS_DSAR_CAPABILITY,
|
||||
DecisionsDsarProvider,
|
||||
)
|
||||
from govoplan_decisions.backend.record_source import (
|
||||
CAPABILITY_RECORD_SOURCE_DECISIONS,
|
||||
create_decisions_record_source,
|
||||
@@ -63,6 +67,10 @@ def _registry(_context: ModuleContext) -> SqlDecisionRegistry:
|
||||
return SqlDecisionRegistry()
|
||||
|
||||
|
||||
def _dsar_provider(_context: ModuleContext) -> DecisionsDsarProvider:
|
||||
return DecisionsDsarProvider()
|
||||
|
||||
|
||||
manifest = ModuleManifest(
|
||||
id=MODULE_ID,
|
||||
name=MODULE_NAME,
|
||||
@@ -85,6 +93,7 @@ manifest = ModuleManifest(
|
||||
ModuleInterfaceProvider(
|
||||
name=CAPABILITY_RECORD_SOURCE_DECISIONS, version="1.0.0"
|
||||
),
|
||||
ModuleInterfaceProvider(name=DECISIONS_DSAR_CAPABILITY, version="0.1.0"),
|
||||
),
|
||||
permissions=(
|
||||
_permission(
|
||||
@@ -126,6 +135,7 @@ manifest = ModuleManifest(
|
||||
capability_factories={
|
||||
CAPABILITY_DECISION_REGISTRY: _registry,
|
||||
CAPABILITY_RECORD_SOURCE_DECISIONS: create_decisions_record_source,
|
||||
DECISIONS_DSAR_CAPABILITY: _dsar_provider,
|
||||
},
|
||||
capability_documentation={
|
||||
CAPABILITY_DECISION_REGISTRY: CapabilityDocumentation(
|
||||
@@ -138,6 +148,14 @@ manifest = ModuleManifest(
|
||||
summary="Resolves complete, currently authorized immutable Decision revisions for Records filing.",
|
||||
contract_version="1.0.0",
|
||||
),
|
||||
DECISIONS_DSAR_CAPABILITY: CapabilityDocumentation(
|
||||
label="Decisions data-subject request provider",
|
||||
summary=(
|
||||
"Exports minimized formal-Decision creator attribution without "
|
||||
"protected reasoning, outcomes, conditions, or payloads."
|
||||
),
|
||||
contract_version="0.1.0",
|
||||
),
|
||||
},
|
||||
migration_spec=MigrationSpec(
|
||||
module_id=MODULE_ID,
|
||||
@@ -161,6 +179,40 @@ manifest = ModuleManifest(
|
||||
),
|
||||
),
|
||||
documentation=(
|
||||
DocumentationTopic(
|
||||
id="decisions.data-subject-requests",
|
||||
title="Formal Decision data-subject requests",
|
||||
summary=(
|
||||
"Export minimized creator attribution from immutable formal Decision "
|
||||
"revisions without exposing protected Decision content."
|
||||
),
|
||||
body=(
|
||||
"Decisions searches exact account, membership, identity, or explicit "
|
||||
"actor identifiers inside the active tenant. An optional Decision "
|
||||
"identifier only narrows that verified actor search and cannot disclose "
|
||||
"a Decision by itself. The access record contains revision, type, state, "
|
||||
"valid-time, recorded-time, and creator activity only. Protected "
|
||||
"reasoning, operative results, conditions, evidence payloads, and "
|
||||
"digests remain excluded. Formal Decision history is immutable legal "
|
||||
"and institutional evidence, so the provider publishes retain-only "
|
||||
"erasure outcomes and never rewrites a revision."
|
||||
),
|
||||
layer="configured",
|
||||
documentation_types=("admin", "user"),
|
||||
audience=("user", "operator", "module_admin", "auditor"),
|
||||
related_modules=("core", "approvals", "committee", "records"),
|
||||
metadata={
|
||||
"help_contexts": ["privacy.data-subject-requests"],
|
||||
"consequence_classes": {
|
||||
"export_creator_attribution": (
|
||||
"Returns lifecycle and creator context without protected payloads."
|
||||
),
|
||||
"retain_formal_history": (
|
||||
"Preserves immutable institutional and legal evidence."
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
DocumentationTopic(
|
||||
id="decisions.formal-outcome",
|
||||
title="Formal institutional Decisions",
|
||||
|
||||
Reference in New Issue
Block a user