from __future__ import annotations from govoplan_core.core.access import CAPABILITY_AUTH_PERMISSION_EVALUATOR, CAPABILITY_AUTH_PRINCIPAL_RESOLVER from govoplan_core.core.modules import DocumentationLink, DocumentationTopic, ModuleManifest, PermissionDefinition, RoleTemplate MODULE_ID = "facilities" MODULE_NAME = "Facilities" MODULE_VERSION = "0.1.7" READ_SCOPE = "facilities:workspace:read" WRITE_SCOPE = "facilities:workspace:write" ADMIN_SCOPE = "facilities:workspace:admin" OPTIONAL_DEPENDENCIES = ( "resources", "assets", "inspections", "contracts", "procurement", "booking", "files", ) def _permission(scope: str, label: str, description: str) -> PermissionDefinition: module_id, resource, action = scope.split(":", 2) return PermissionDefinition( scope=scope, label=label, description=description, category="Facilities", level="tenant", module_id=module_id, resource=resource, action=action, ) PERMISSIONS = ( _permission(READ_SCOPE, "View facilities workspace", "Read facilities records, configuration, and workflow context."), _permission(WRITE_SCOPE, "Manage facilities workspace", "Create and update facilities records and workflow state."), _permission(ADMIN_SCOPE, "Administer facilities workspace", "Configure facilities policies, templates, and tenant-level administration."), ) ROLE_TEMPLATES = ( RoleTemplate( slug="facilities_manager", name="Facilities manager", description="Manage facilities records and workflow state.", permissions=(READ_SCOPE, WRITE_SCOPE), ), RoleTemplate( slug="facilities_viewer", name="Facilities viewer", description="Read facilities records and workflow context.", permissions=(READ_SCOPE,), ), ) DOCUMENTATION = ( DocumentationTopic( id=f"{MODULE_ID}.module-boundary", title=f"{MODULE_NAME} module boundary", summary="Facilities management for buildings, rooms, maintenance, cleaning, keys, access zones, recurring inspections, occupancy, defects, and service contractors.", body=( "This repository is currently a platform module seed. It registers the domain boundary, " "permission surface, role templates, and documentation metadata before runtime APIs, " "database models, migrations, and WebUI routes are introduced." ), layer="available", documentation_types=("admin",), audience=("operator", "module_admin", "product_owner"), order=100, related_modules=OPTIONAL_DEPENDENCIES, links=( DocumentationLink( label="Repository domain boundary", href="govoplan-facilities/docs/FACILITIES_DOMAIN_BOUNDARY.md", kind="repository", ), ), metadata={ "seed": True, "domain_objects": ['building and room operations', 'maintenance and cleaning schedules', 'key and access-zone facts', 'occupancy metadata', 'defect records', 'contractor references'], "first_slice": "Create building, room, maintenance block, defect, contractor, and inspection link concepts with clear resource and asset boundaries.", }, ), ) manifest = ModuleManifest( id=MODULE_ID, name=MODULE_NAME, version=MODULE_VERSION, dependencies=("access",), optional_dependencies=OPTIONAL_DEPENDENCIES, required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR), permissions=PERMISSIONS, role_templates=ROLE_TEMPLATES, documentation=DOCUMENTATION, ) def get_manifest() -> ModuleManifest: return manifest