Files
govoplan-idm/src/govoplan_idm/backend/workflow_definitions.py
T

194 lines
6.1 KiB
Python

from __future__ import annotations
from govoplan_core.core.workflows import WorkflowDefinitionContribution
def function_assignment_workflow_definitions(
*,
module_version: str,
) -> tuple[WorkflowDefinitionContribution, ...]:
return (
_contribution(
module_version=module_version,
definition_key="function-assignment-request",
name="Request an organization function",
description=(
"Governed holder, authority, and optional recipient decisions "
"for a self-requested organization function assignment."
),
kind="request",
),
_contribution(
module_version=module_version,
definition_key="function-assignment-grant",
name="Bestow an organization function",
description=(
"Governed holder, authority, and recipient decisions for an "
"organization function grant."
),
kind="grant",
),
)
def _contribution(
*,
module_version: str,
definition_key: str,
name: str,
description: str,
kind: str,
) -> WorkflowDefinitionContribution:
return WorkflowDefinitionContribution(
origin_module_id="idm",
origin_module_version=module_version,
definition_key=definition_key,
name=name,
description=description,
graph=_graph(kind=kind),
scope_type="system",
inherit_to_lower_scopes=True,
allow_start=True,
allow_reuse=False,
allow_automation=False,
execution_mode="guided",
activate_on_install=True,
metadata={
"domain": "idm.function_assignment_change",
"change_kind": kind,
"state_owner": "idm",
},
policy_metadata={
"governance_capability": ("policy.functionAssignmentGovernance"),
},
)
def _graph(*, kind: str) -> dict[str, object]:
return {
"schema_version": 1,
"nodes": [
{
"id": "start",
"type": "workflow.start.manual",
"label": "Submitted",
"position": {"x": 20, "y": 120},
"config": {
"input_schema_ref": (f"govoplan/idm/function-assignment-{kind}.v1"),
},
},
{
"id": "holder_review",
"type": "workflow.review",
"label": "Holder review",
"position": {"x": 230, "y": 120},
"config": {
"title": "Holder review",
"reviewer": "effective-holder",
"required_evidence": [],
"view_surface_ids": [
"idm.action.view-function-assignments",
],
},
},
{
"id": "authority_review",
"type": "workflow.review",
"label": "Authority clearance",
"position": {"x": 470, "y": 120},
"config": {
"title": "Authority clearance",
"reviewer": "designated-authority",
"required_evidence": [],
"view_surface_ids": [
"idm.action.view-function-assignments",
],
},
},
{
"id": "recipient_review",
"type": "workflow.review",
"label": "Recipient acceptance",
"position": {"x": 730, "y": 120},
"config": {
"title": "Recipient acceptance",
"reviewer": "candidate",
"required_evidence": [],
"view_surface_ids": [
"idm.action.view-function-assignments",
],
},
},
{
"id": "completed",
"type": "workflow.end.completed",
"label": "Approved",
"position": {"x": 990, "y": 70},
"config": {"output_mapping": {}},
},
{
"id": "rejected",
"type": "workflow.end.cancelled",
"label": "Rejected",
"position": {"x": 990, "y": 230},
"config": {"reason": "Function assignment change rejected"},
},
],
"edges": [
{
"id": "start-holder",
"source": "start",
"target": "holder_review",
},
{
"id": "holder-authority",
"source": "holder_review",
"source_port": "approved",
"target": "authority_review",
},
{
"id": "holder-rejected",
"source": "holder_review",
"source_port": "rejected",
"target": "rejected",
},
{
"id": "authority-recipient",
"source": "authority_review",
"source_port": "approved",
"target": "recipient_review",
},
{
"id": "authority-rejected",
"source": "authority_review",
"source_port": "rejected",
"target": "rejected",
},
{
"id": "recipient-completed",
"source": "recipient_review",
"source_port": "approved",
"target": "completed",
},
{
"id": "recipient-rejected",
"source": "recipient_review",
"source_port": "rejected",
"target": "rejected",
},
],
"metadata": {
"notation": "govoplan.workflow.native",
"domain": "idm.function_assignment_change",
"change_kind": kind,
"optional_steps": [
"holder_review",
"authority_review",
"recipient_review",
],
},
}
__all__ = ["function_assignment_workflow_definitions"]