feat(records): add governed DSAR coverage

This commit is contained in:
2026-08-21 02:31:10 +02:00
parent e9d2827581
commit 38f203a906
5 changed files with 1794 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+51
View File
@@ -38,6 +38,10 @@ from govoplan_core.core.search import SearchSourceProviderRegistration
from govoplan_core.core.views import ViewSurface
from govoplan_core.db.base import Base
from govoplan_records.backend.db import models as record_models
from govoplan_records.backend.dsar_provider import (
RECORDS_DSAR_CAPABILITY,
RecordsDsarProvider,
)
from govoplan_records.backend.search_source import create_records_search_source
from govoplan_records.backend.service import SqlRecordRegistry
from govoplan_records.backend.archive import (
@@ -94,6 +98,11 @@ def _records_registry(context: ModuleContext) -> SqlRecordRegistry:
return SqlRecordRegistry(context.registry)
def _dsar_provider(context: ModuleContext) -> RecordsDsarProvider:
del context
return RecordsDsarProvider()
def _simulated_archive_provider(
context: ModuleContext,
) -> SimulatedRecordArchiveProvider:
@@ -184,6 +193,41 @@ ROLE_TEMPLATES = (
)
DOCUMENTATION = (
DocumentationTopic(
id="records.data-subject-requests",
title="eAkte data-subject requests",
summary="Export minimized record metadata while preserving retention, hold, disposition, and archive evidence.",
body=(
"Records correlates exact record, revision, item, volume, chronology, hold, disposition, transfer-package, and provider-owned source references inside one tenant. Account, identity, and membership selectors expose staff accountability attribution but never imply that the staff member is the subject of a record. A record-subject export therefore needs an authoritative record or source linkage. "
"The export includes bounded record, filing, chronology, hold, disposition, and transfer lifecycle metadata. Source content, snapshots, search text, opaque contexts and payloads, hashes, replay keys, launch URLs, archive manifests and receipts, approval identifiers, and unrelated records are excluded. Immutable evidence is retained. The current record fact receives non-executable manual review and can change only through the governed eAkte lifecycle."
),
layer="configured",
documentation_types=("admin", "user"),
audience=("user", "records_manager", "operator", "module_admin", "auditor"),
order=90,
related_modules=(
"core",
"cases",
"files",
"forms_runtime",
"workflow_engine",
"approvals",
"dms",
),
links=(
DocumentationLink(
label="Records domain boundary",
href="govoplan-records/docs/RECORDS_DOMAIN_BOUNDARY.md",
kind="repository",
),
),
metadata={
"help_contexts": [
"records.data-subject-requests",
"records.lifecycle",
],
},
),
DocumentationTopic(
id="records.workspace",
title="eAkte workspace",
@@ -443,10 +487,12 @@ manifest = ModuleManifest(
ModuleInterfaceProvider(name="records.registry", version="1.0.0"),
ModuleInterfaceProvider(name="records.filing", version="1.0.0"),
ModuleInterfaceProvider(name="records.archive", version="1.0.0"),
ModuleInterfaceProvider(name=RECORDS_DSAR_CAPABILITY, version="0.1.0"),
),
capability_factories={
CAPABILITY_RECORDS_FILING: _records_registry,
record_archive_capability(SIMULATION_PROVIDER_ID): _simulated_archive_provider,
RECORDS_DSAR_CAPABILITY: _dsar_provider,
},
capability_documentation={
CAPABILITY_RECORDS_FILING: CapabilityDocumentation(
@@ -461,6 +507,11 @@ manifest = ModuleManifest(
),
contract_version="1.0.0",
),
RECORDS_DSAR_CAPABILITY: CapabilityDocumentation(
label="Records data-subject request provider",
summary="Finds minimized eAkte and operator-attribution evidence without bypassing record retention.",
contract_version="0.1.0",
),
},
migration_spec=MigrationSpec(
module_id=MODULE_ID,