yonbip-workflow-path-table
npx skills add https://github.com/liujian16/yonbip-skills --skill yonbip-workflow-path-table
Agent 安装分布
Skill 文档
YonBIP Workflow Path Table Generator
Converts natural language business approval workflow descriptions into YonBIP-standard Excel workflow path tables.
Core Principle: Dynamic Column Extraction
CRITICAL: Do NOT assume any fixed columns. Every table structure must be derived from the user’s description:
- Condition Columns: Extract all condition dimensions mentioned
- Examples: è´¹ç¨ç±»å, éé¢, ä¾åºåç±»å, é¨é¨, å°åº, éè´ç±»å«, etc.
- Role Columns: Extract ALL roles mentioned in the approval chains
- Examples: é¨é¨ä¸»ç®¡, è´¢å¡ç»ç, æ»ç»ç, è¡æ¿ä¸»ç®¡, éè´ä¸å, æ³å¾é¡¾é®, etc.
- Build table structure based ONLY on what’s actually in the description
Core Principle: Mutually Exclusive Conditions
æ¯ä¸è¡çæ¡ä»¶ç»åå¿ é¡»æ¯å¯ä¸çãäºæ¥çã ä»»æç»å®è¾å ¥åªè½å¹é å¯ä¸ä¸è¡ã
为ä»ä¹äºæ¥å¾éè¦ï¼
YonBIP ç³»ç»éè¦æ ¹æ®æ¡ä»¶ç¡®å®å¯ä¸ç审æ¹è·¯å¾ã妿䏤è¡çæ¡ä»¶æéå ï¼ç³»ç»æ æ³å¤æåºè¯¥èµ°åªæ¡è·¯å¾ã
äºæ¥è§å
-
åä¸åçå¼å¿ é¡»äºæ¥ï¼å¯¹äºæ¯ä¸ªæ¡ä»¶åï¼ä»»æä¸¤è¡çå¼ä¸è½åæ¶å¹é åä¸è¾å ¥
- â
< 1000å>= 1000äºæ¥ - â
å ¨é¨å>= 5000éå ï¼”å ¨é¨”å å«”>= 5000″ï¼ - â
< 5000å>= 3000éå ï¼3000-5000 åæ¶å¹é 两è ï¼
- â
-
è¡ç»åå¿ é¡»äºæ¥ï¼å³ä½¿ååå¼ä¸äºæ¥ï¼ç»ååä¹å¿ é¡»äºæ¥
- â
è¡æ¿ç±»éè´ | < 5000åç产类éè´ | < 5000äºæ¥ï¼éè´ç±»å«ä¸åï¼ - â
è¡æ¿ç±»éè´ | å ¨é¨åè¡æ¿ç±»éè´ | >= 5000éå
- â
-
使ç¨ååºèéå å ï¼ä¸è¦ç¨”å ¨é¨”å å æ´å ·ä½çæ¡ä»¶
- â é误ï¼å å”å ¨é¨”çè§åï¼åå å “>= 5000″çè§å
- â
æ£ç¡®ï¼æéé¢åºé´ååºï¼
< 5000å>= 5000
éé¢åºé´çæ åååºæ¹å¼
< 1000 â å°äº1000
[1000, 5000) â 1000å°5000以ä¸ï¼å«1000ï¼ä¸å«5000ï¼
>= 5000 â 5000å以ä¸
è¿ç§ååºæ¹å¼ç¡®ä¿æ¯ä¸ªéé¢å¼é½è½å¹é å¯ä¸ä¸è¡ã
Workflow
Dry Run Mode: If user specifies --dryrun flag:
- Skip Step 0 (clarification)
- Skip Step 4 (Excel generation)
- Only output the markdown table
Step 0: Understand and Clarify (çè§£ä¸æ¾æ¸ )
Skip in –dryrun mode: If the --dryrun flag is set, skip this entire step and proceed directly to Step 1.
After receiving the user’s approval rules, first analyze the content:
-
Understand: Parse the natural language and identify:
- The main business scenario (è´¹ç¨ç±»åãéè´ç±»åç)
- Key conditions mentioned (éé¢åºé´ãä¾åºåç±»åç)
- Approval roles and their sequences
-
Check for Ambiguities: Determine if the rules are complete and unambiguous:
- Incomplete condition coverage (æ¯å¦æéæ¼çåºæ¯?)
- Unclear role definitions (è§è²åç§°æ¯å¦æç¡®?)
- Boundary conditions not specified (è¾¹çå¼å¦ä½å¤ç?)
- Multiple interpretations possible (æ¯å¦ææ§ä¹?)
-
Decision Point:
- If rules are clear: Skip directly to Step 1 (no user interaction needed)
- If ambiguities exist: Proceed to clarification
-
Interactive Clarification (only if ambiguities exist):
- First, present your understanding of the rules
- Then, ask specific questions using AskUserQuestion tool:
- Present specific questions with clear options
- Allow “Other” for custom input
- Wait for user response before proceeding
- Example: “æçè§£æ¨çè§å毅ï¼ä½æä»¥ä¸çé®ï¼…”
-
Proceed to Step 1: Once the rules are clear (either no ambiguities or user has clarified), proceed to extract and structure the data.
Typical scenarios requiring clarification:
-
æ¡ä»¶è¦çä¸å®æ´ï¼
- è§åï¼”1000å 以ä¸èµ°Aï¼5000å 以ä¸èµ°B”
- é®é¢ï¼”1000-5000å ä¹é´å¦ä½å¤çï¼”
-
è§è²ä¸æç¡®ï¼
- è§å4主管审湔
- é®é¢ï¼”æ¯é¨é¨ä¸»ç®¡è¿æ¯ä¸å¡ä¸»ç®¡ï¼”
-
è¾¹ç弿§ä¹ï¼
- è§åï¼”1000å 以且å”1000-5000å ”
- é®é¢ï¼”æ£å¥½1000å èµ°åªæ¡è·¯å¾ï¼”
-
é»è®¤å¼/å åºè§åï¼
- è§åï¼åªè¯´æäºç¹å®åºæ¯
- é®é¢ï¼”å ¶ä»æªè¯´æçåºæ¯å¦ä½å¤çï¼”
Step 1: Extract and Structure
Analyze the natural language and identify:
A. All Condition Dimensions (åå å)
- What categories/dimensions determine the approval path?
- Common patterns: è´¹ç¨ç±»å, éé¢åºé´, ä¾åºåæ§è´¨, é¨é¨ç±»å, etc.
B. All Approval Roles (åå å)
- Who are the approvers? List ALL unique roles mentioned
- Preserve the exact role names from the description
- Do NOT add roles that aren’t mentioned
C. Approval Logic (è¡¨æ ¼å 容)
- Map out each scenario’s approval sequence
- Use numbers (1, 2, 3…) for approval order
- Use
n/afor non-participating roles - Use
N:[condition]for conditional approvals
Step 2: Generate Markdown Table
Build the table with extracted columns:
| [æ¡ä»¶å1] | [æ¡ä»¶å2] | ... | [è§è²1] | [è§è²2] | [è§è²3] | ... |
|----------|----------|-----|---------|---------|---------|-----|
| å¼A | æ¡ä»¶X | ... | 1 | n/a | 2 | ... |
Validate mutual exclusivity before presenting:
Check that no two rows have overlapping conditions. If overlap exists:
- Identify the overlapping rows
- Refactor using proper partitioning (e.g., split “å ¨é¨” into specific ranges)
- Ensure each input matches exactly one row
Present to user for confirmation.
Step 3: User Confirmation
Ask: “è¯·ç¡®è®¤ä»¥ä¸æµç¨è·¯å¾è¡¨æ¯å¦æ£ç¡®ï¼å¦éä¿®æ¹è¯·ç´æ¥åè¯æã”
Wait for approval or modifications.
Step 4: Generate Excel
After confirmation, use the conversion script to generate Excel file.
write the markdown file to same folder of the Excel file.
Script location: scripts/md_to_excel.py (within this skill directory)
Usage:
python3 ${SKILL_DIR}/scripts/md_to_excel.py <input.md> <output.xlsx> --condition-cols <N>
Parameters:
--condition-cols N: æå®å N å为”æ¡ä»¶”åï¼å¦ï¼è´¹ç¨ç±»åãéé¢åºé´ï¼ï¼å ¶ä½å为”ç¯è”åï¼å®¡æ¹è§è²ï¼
The script will:
- Parse the Markdown table structure
- Add explanation row (“æ¡ä»¶” | “ç¯è”)
- Apply YonBIP standard formatting (headers, borders, alignment)
- Convert
n/ato empty cells - Generate
.xlsxfile
Examples
Example 1: æå¾ è´¹ï¼ç®ååºæ¯ï¼
Input:
æå¾
费审æ¹è§åï¼1000å
以ä¸åªéé¨é¨ä¸»ç®¡å®¡æ¹ï¼1000-5000å
éè¦é¨é¨ä¸»ç®¡åè´¢å¡ç»çï¼5000å
以ä¸åéè¦é¨é¨ä¸»ç®¡ãè´¢å¡ç»çåæ»ç»çã
Extracted:
- Condition columns: è´¹ç¨ç±»å, éé¢
- Role columns: é¨é¨ä¸»ç®¡, è´¢å¡ç»ç, æ»ç»ç
Output:
| è´¹ç¨ç±»å | éé¢ | é¨é¨ä¸»ç®¡ | è´¢å¡ç»ç | æ»ç»ç |
|---|---|---|---|---|
| æå¾ è´¹ | < 1000 | 1 | n/a | n/a |
| æå¾ è´¹ | [1000, 5000) | 1 | 2 | n/a |
| æå¾ è´¹ | >= 5000 | 1 | 2 | 3 |
Example 2: éè´å®¡æ¹ï¼å¤æ¡ä»¶+å¤è§è²ï¼
Input:
è¡æ¿ç±»éè´ï¼æ 论éé¢ï¼é¨é¨è´è´£äºº(1)âè¡æ¿ä¸»ç®¡(2)ãè¶
è¿5000å
å¢å è´¢å¡æ»ç(3)ã
ç产类éè´ï¼<20000ï¼é¨é¨è´è´£äºº(1)âéè´ä¸å(2)âè´¢å¡æ»ç(3)ã
â¥20000ï¼é¨é¨è´è´£äºº(1)âéè´ç»ç(2)âè´¢å¡æ»ç(3)âæ»ç»ç(4)ã
æ°å使¹éå¢å æ³å¾é¡¾é®ã
Extracted:
- Condition columns: éè´ç±»å«, éé¢, ä¾åºåç±»å
- Role columns: é¨é¨è´è´£äºº, è¡æ¿ä¸»ç®¡, éè´ä¸å, éè´ç»ç, è´¢å¡æ»ç, æ»ç»ç, æ³å¾é¡¾é®
Output:
| éè´ç±»å« | éé¢ | ä¾åºåç±»å | é¨é¨è´è´£äºº | è¡æ¿ä¸»ç®¡ | éè´ä¸å | éè´ç»ç | è´¢å¡æ»ç | æ»ç»ç | æ³å¾é¡¾é® |
|---|---|---|---|---|---|---|---|---|---|
| è¡æ¿ç±»éè´ | < 5000 | å ¨é¨ | 1 | 2 | n/a | n/a | n/a | n/a | n/a |
| è¡æ¿ç±»éè´ | >= 5000 | å ¨é¨ | 1 | 2 | n/a | n/a | 3 | n/a | n/a |
| ç产类éè´ | < 20000 | å ¨é¨ | 1 | n/a | 2 | n/a | 3 | n/a | n/a |
| ç产类éè´ | >= 20000 | èå使¹ | 1 | n/a | n/a | 2 | 3 | 4 | n/a |
| ç产类éè´ | >= 20000 | æ°å使¹ | 1 | n/a | n/a | 2 | 3 | 4 | 5 |
Note: æ¡ä»¶äºæ¥ – æ¯è¡ä»£è¡¨å¯ä¸çæ¡ä»¶ç»åï¼æ²¡æéå ã
Example 3: å·®æ è´¹ï¼æ åYonBIPè§è²ï¼
Input:
å·®æ
è´¹5000å
以ä¸èµ°ä¸»ç®¡åè´¢å¡ï¼5000-10000å¢å ç»çï¼10000以ä¸å
¨å®¡ã
Extracted:
- Condition columns: è´¹ç¨ç±»å, éé¢
- Role columns: ä¸å¡ä¸»ç®¡, è´¢å¡ä¸å, ä¸å¡ç»ç, ä¸å¡æ»ç»ç, æ»è£ (注æï¼æåºç°é¡ºåºæå)
Output:
| è´¹ç¨ç±»å | éé¢ | ä¸å¡ä¸»ç®¡ | è´¢å¡ä¸å | ä¸å¡ç»ç | ä¸å¡æ»ç»ç | æ»è£ |
|---|---|---|---|---|---|---|
| å·®æ è´¹ç¨ | < 5000 | 1 | 2 | n/a | n/a | n/a |
| å·®æ è´¹ç¨ | [5000, 10000) | 1 | 3 | 2 | n/a | n/a |
| å·®æ è´¹ç¨ | >= 10000 | 1 | 4 | 2 | 3 | 5 |
Value Formatting
Condition Values
- éé¢:
< 5000,>= 10000,[5000, 10000),å ¨é¨ - ç±»å«: å ·ä½ç±»å«åç§° (å¦: å·®æ è´¹ç¨, è¡æ¿ç±»éè´)
- éç¨:
å ¨é¨è¡¨ç¤ºä¸éå¶
Approval Nodes
- 1, 2, 3…: Approval sequence order
- n/a: Role does not participate
- N:[condition]: Nth step with additional condition
- Example:
2:[éé¢>=500]= 2nd approver AND amount >= 500
- Example:
Common Patterns
Threshold phrases:
- “Xå
以且 â
< X - “Xå
以å
” â
<= X - “X-Yå
” â
[X, Y) - “Xå
以且 â
>= X
Chain phrases:
- “èµ°AåB” â A then B (sequential)
- “å¢å C” â Add C to chain
- “å ¨å®¡/å ¨é¨” â All roles participate
Condition phrases:
- “妿æ¯Xä¸Y” â Add condition columns
- “满足XXæ¡ä»¶” â
N:[XX] - “éXX审湔 â Add XX role
Common Mistakes to Avoid
â éè¯¯ï¼æ¡ä»¶éå
| éè´ç±»å« | éé¢ | ... |
|---------|------|-----|
| è¡æ¿ç±»éè´ | å
¨é¨ | ... | â ä¸ä¸ä¸è¡éå
| è¡æ¿ç±»éè´ | >= 5000 | ... | â "å
¨é¨"å
å«äº">= 5000"
é®é¢ï¼ä¸ä¸ª6000å çè¡æ¿ç±»éè´ä¼åæ¶å¹é 两è¡ã
â æ£ç¡®ï¼äºæ¥ååº
| éè´ç±»å« | éé¢ | ... |
|---------|------|-----|
| è¡æ¿ç±»éè´ | < 5000 | ... | â ä¸å
å«5000
| è¡æ¿ç±»éè´ | >= 5000 | ... | â ä»5000å¼å§
â é误ï¼åºé´è¾¹çéå
| éé¢ | ... |
|------|-----|
| < 5000 | ... |
| >= 3000 | ... | â 3000-5000 éå
â æ£ç¡®ï¼è¾¹çæç¡®
| éé¢ | ... |
|------|-----|
| < 3000 | ... |
| [3000, 5000) | ... |
| >= 5000 | ... |
â é误ï¼ä½¿ç¨”å ¨é¨”å å å ·ä½æ¡ä»¶
å½ç¨æ·è¯´”è¶ è¿5000å éè¦é¢å¤å®¡æ¹”æ¶ï¼ä¸è¦çæï¼
| éé¢ | è´¢å¡æ»ç |
|------|---------|
| å
¨é¨ | n/a | â é误ï¼ä¸ä¸ä¸è¡éå
| >= 5000 | 3 | â 被ä¸é¢å
å«
â æ£ç¡®ï¼ååºè¦çæææ åµ
| éé¢ | è´¢å¡æ»ç |
|------|---------|
| < 5000 | n/a |
| >= 5000 | 3 |