| name | uipath-workflow-planning |
| tags | ["uipath-dev","planning","canvas","sdd"] |
| description | Plan UiPath workflow implementation from canvas/SDD — MANDATORY before any UiPath codegen. Workflow-type agnostic. Run first, then route to uipath-automation, uipath-longrunning-workflow, uipath-bpmn-maestro, coded-workflow-builder, or other target skill. Triggers on "uipath-workflow-planning", "generate XAML from canvas", "build UiPath from canvas", "workflow plan", "solution flow", or when canvas/SDD is present. |
UiPath Workflow Planning (Canvas to Code Bridge)
MANDATORY STEP before generating any UiPath-related implementation (Studio XAML, coded automation, or Maestro-aligned specs). This skill extracts and validates requirements from canvas or SDD; it does not assume a specific project template — the downstream skill depends on the automation type.
When to Use
This skill is AUTOMATICALLY TRIGGERED before codegen skills such as:
uipath-automation
uipath-longrunning-workflow (Studio Long Running Automation / ProcessDiagram)
coded-workflow-builder
- Any workflow where canvas/SDD defines arguments and flow (including inputs for
uipath-bpmn-maestro when translating model to delivery)
NEVER generate UiPath implementation without first completing this planning step when a canvas or structured SDD exists (or obtain an equivalent written execution plan from the user).
Purpose
Prevents the common error of generating workflows with incorrect or missing arguments by:
- Extracting ALL data fields from canvas nodes
- Mapping data flow between workflows
- Identifying visibility rules (LIMITED vs FULL VIEW)
- Validating argument types and sources
- Creating a workflow execution plan
Core Workflow
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 1. LOCATE │────>│ 2. EXTRACT │────>│ 3. MAP DATA │
│ Canvas File │ │ Node Details │ │ Flow │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 6. GENERATE │<────│ 5. CREATE │<────│ 4. IDENTIFY │
│ Code │ │ Execution Plan │ │ Visibility │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Step 1: Locate Canvas File
ALWAYS search for canvas/flow documentation first:
project/
├── docs/
│ ├── solution-flow.json # Primary canvas file
│ ├── business-flow.json # Business process flow
│ └── technical-flow.json # Technical implementation
├── canvas/
│ └── *.json # Alternative location
└── *.canvas.json # Root level canvas
Search patterns:
**/solution-flow*.json
**/*canvas*.json
**/*flow*.json
Step 2: Extract Node Details
For each node in the canvas, extract:
Form/Approval Nodes (type: "form" or "human")
{
"id": "n8",
"label": "Sales Rep Form",
"drillDown": {
"type": "form",
"title": "Sales Rep Approval Form (LIMITED VIEW)",
"visibilityLevel": "LIMITED",
"hiddenFields": ["profitabilityMargin", "managerChain"],
"fields": [
{"name": "accountName", "label": "Customer Account", "source": "SF Connector", "editable": false},
{"name": "maxCapPercent", "label": "Maximum Cap %", "source": "Sales Rep Input", "editable": true}
],
"inputArguments": [
{"name": "in_ProcessId", "type": "String", "source": "Queue Item (QuoteId)"},
{"name": "in_CustomerName", "type": "String", "source": "Queue Item"}
],
"outputArguments": [
{"name": "out_ApprovalId", "type": "String"},
{"name": "out_MaxCapPercent", "type": "Decimal"}
]
}
}
API/Service Nodes (type: "api")
{
"id": "n5",
"label": "Bob HR API",
"drillDown": {
"type": "api",
"method": "POST",
"endpoint": "https://api.hibob.com/v1/people/search",
"outputFields": ["bobEmployeeId", "name", "email", "title", "isCRO"]
}
}
DMN/Decision Nodes (type: "dmn")
{
"id": "n7",
"label": "Policy Check",
"drillDown": {
"type": "dmn",
"inputs": [
{"name": "quoteTerm", "type": "number"},
{"name": "maxCapPercent", "type": "number"},
{"name": "cpiInclusion", "type": "boolean"},
{"name": "acv", "type": "number"}
],
"outputs": [
{"name": "withinPolicy", "type": "boolean"},
{"name": "requiresFinance", "type": "boolean"}
]
}
}
DMN Output Guidelines
Simplified outputs: Use boolean outputs for easier consumption:
withinPolicy (boolean): true if request meets policy, false otherwise
requiresFinance (boolean): true if Finance approval needed
DMN Boolean Guidelines
CRITICAL: Boolean values in DMN must use true/false, never "Yes"/"No":
| Context | Correct | Incorrect |
|---|
DMN XML <inputEntry> | <text>true</text> | <text>Yes</text> |
DMN XML <outputEntry> | <text>false</text> | <text>No</text> |
| Canvas JSON rules | "withinPolicy": true | "withinPolicy": "true" |
| Form field defaults | "Default: true" | "Default: Yes" |
Queue Nodes (type: "queue")
{
"id": "n3",
"label": "Queue: RenewalPriceCommitment",
"drillDown": {
"type": "queue",
"dataUploaded": {
"SpecificContent": {
"quoteId": "{from SF}",
"accountName": "{from SF}",
"salesRepEmail": "{from SF}",
"acv": "{from SF}"
}
}
}
}
Step 3: Map Data Flow
Create a data flow matrix showing how data moves between nodes:
| Data Field | Source Node | Target Nodes | Type | Notes |
|---|
| quoteId | n3 (Queue) | n8, n10, n13, n15, n17 | String | Reference ID |
| accountName | n2 (SF) | All approval forms | String | Customer name |
| profitabilityMargin | n2 (SF) | n10, n13, n15, n17 | Decimal | HIDDEN from n8 |
| managerChainJSON | n5 (Bob API) | n10, n13, n15 | String | JSON array |
| policyStatus | n7 (DMN) | n10, n13, n15, n17 | String | "WithinPolicy" or "OutOfPolicy" |
| maxCapPercent | n8 (Sales Rep) | n7, n10, n13, n15, n17 | Decimal | User input |
Step 4: Identify Visibility Rules
Visibility Levels
| Level | Description | Hidden Fields |
|---|
| LIMITED | Sales Rep view | profitabilityMargin, managerChain, priorApprovals |
| FULL | Manager/RevOps view | None - sees everything |
| FULL + CHAIN EDITOR | RevOps only | None + can edit managerChain |
| FULL + POLICY | Finance only | None + sees policyViolationReason |
Per-Workflow Visibility Matrix
| Workflow | Visibility | Sees Profitability | Sees Chain | Edits Chain | Sees Prior Approvals |
|---|
| ApprovalFlow_SalesRep | LIMITED | NO | NO | NO | NO |
| ApprovalFlow_RevOps | FULL + CHAIN EDITOR | YES | YES | YES | NO |
| ApprovalFlow_Manager | FULL | YES | YES | NO | YES |
| ApprovalFlow_CRO | FULL | YES | YES | NO | YES |
| ApprovalFlow_Finance | FULL + POLICY | YES | YES | NO | YES |
Step 5: Create Execution Plan
Generate a structured execution plan. Name the main entry workflow and project type for the target automation (examples: Main.xaml for REFramework, Main-Queue.xaml for Long Running Automation, attended entry workflow, etc.).
## Workflow Execution Plan
### Example — Long Running Automation (Studio)
### Main entry: Main-Queue.xaml
Type: Long-Running ProcessDiagram (example)
Entry: Queue trigger (example)
### Execution Sequence:
1. InitAllSettingsJSON.xaml
- Input: None
- Output: Config (Dictionary)
2. getTransaction.xaml
- Input: Config
- Output: TransactionItem (QueueItem)
3. GetManagerHierarchy.xaml (Services/)
- Input: in_SalesRepEmail (from Queue), in_BobAPIUrl, in_BobAPICredentials
- Output: out_ManagerChainJSON, out_CROEmail, out_CROName, out_ManagerCount
4. ApprovalFlow_SalesRep.xaml (Workflows/)
- Visibility: LIMITED
- Input: in_ProcessId, in_Title, in_CustomerName, in_QuoteId, in_ACV, in_TCV, in_QuoteTerm, in_Config
- Output: out_ApprovalId, out_ResponseToken, out_MaxCapPercent, out_CpiInclusion, out_BusinessJustification
5. PolicyCheck.xaml (Services/)
- Input: in_QuoteTerm (Int32), in_MaxCapPercent (Decimal), in_CpiInclusion (Boolean), in_ACV (Decimal)
- Output: out_PolicyStatus, out_RequiresFinance, out_PolicyViolationReason
6. ApprovalFlow_RevOps.xaml (Workflows/)
- Visibility: FULL + CHAIN EDITOR
- Input: All from SalesRep + in_ProfitabilityMargin, in_ManagerChainJSON, in_PolicyStatus
- Output: out_ApprovalId, out_ResponseToken, out_ModifiedManagerChainJSON, out_RevOpsComments
... (continue for all workflows)
Step 6: Argument Specification
For each workflow, generate complete argument specifications:
### ApprovalFlow_SalesRep.xaml
#### Input Arguments
| Name | Type | Source | Required |
|------|------|--------|----------|
| in_ProcessId | String | TransactionItem.Reference | Yes |
| in_Title | String | "Sales Rep Approval - Renewal Price Commitment" | Yes |
| in_NotificationChannel | String | Config("NotificationChannel") | Yes |
| in_ApproverEmail | String | TransactionItem.SpecificContent("salesRepEmail") | Yes |
| in_CustomerName | String | TransactionItem.SpecificContent("accountName") | Yes |
| in_QuoteId | String | TransactionItem.SpecificContent("quoteId") | Yes |
| in_ACV | String | TransactionItem.SpecificContent("acv") | Yes |
| in_TCV | String | TransactionItem.SpecificContent("tcv") | Yes |
| in_QuoteTerm | Int32 | CInt(TransactionItem.SpecificContent("quoteTerm")) | Yes |
| in_CallBackURL | String | Config("CallbackWebhookURL") | Yes |
| in_Config | Dictionary(String, Object) | Config | Yes |
#### Output Arguments
| Name | Type | Description |
|------|------|-------------|
| out_ApprovalId | String | HITL Platform approval ID |
| out_ResponseToken | String | Token for webhook callback |
| out_MaxCapPercent | Decimal | User-entered max cap percentage |
| out_CpiInclusion | Boolean | User selection for CPI |
| out_BusinessJustification | String | User-entered justification |
| out_RenewalCommitmentTerm | Int32 | User-entered renewal term |
Output: Planning Document
Generate a workflow-plan.md file in the project docs folder:
# Workflow Implementation Plan
Generated: {timestamp}
Canvas Source: project/docs/solution-flow.json
## 1. Data Flow Summary
[Data flow matrix]
## 2. Visibility Rules
[Visibility matrix]
## 3. Workflow Specifications
### 3.1 ApprovalFlow_SalesRep
[Complete argument specification]
### 3.2 ApprovalFlow_RevOps
[Complete argument specification]
... (all workflows)
## 4. Execution Sequence
[Ordered list with dependencies]
## 5. Validation Checklist
- [ ] All canvas fields mapped to arguments
- [ ] Visibility rules applied correctly
- [ ] Data types match canvas specification
- [ ] Output arguments capture all user inputs
- [ ] Prior approvals chain maintained