tech-hub-skills 1.2.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/{LICENSE → .claude/LICENSE} +21 -21
  2. package/.claude/README.md +291 -0
  3. package/.claude/bin/cli.js +266 -0
  4. package/{bin → .claude/bin}/copilot.js +182 -182
  5. package/{bin → .claude/bin}/postinstall.js +42 -42
  6. package/{tech_hub_skills/skills → .claude/commands}/README.md +336 -336
  7. package/{tech_hub_skills/skills → .claude/commands}/ai-engineer.md +104 -104
  8. package/{tech_hub_skills/skills → .claude/commands}/aws.md +143 -143
  9. package/{tech_hub_skills/skills → .claude/commands}/azure.md +149 -149
  10. package/{tech_hub_skills/skills → .claude/commands}/backend-developer.md +108 -108
  11. package/{tech_hub_skills/skills → .claude/commands}/code-review.md +399 -399
  12. package/{tech_hub_skills/skills → .claude/commands}/compliance-automation.md +747 -747
  13. package/{tech_hub_skills/skills → .claude/commands}/compliance-officer.md +108 -108
  14. package/{tech_hub_skills/skills → .claude/commands}/data-engineer.md +113 -113
  15. package/{tech_hub_skills/skills → .claude/commands}/data-governance.md +102 -102
  16. package/{tech_hub_skills/skills → .claude/commands}/data-scientist.md +123 -123
  17. package/{tech_hub_skills/skills → .claude/commands}/database-admin.md +109 -109
  18. package/{tech_hub_skills/skills → .claude/commands}/devops.md +160 -160
  19. package/{tech_hub_skills/skills → .claude/commands}/docker.md +160 -160
  20. package/{tech_hub_skills/skills → .claude/commands}/enterprise-dashboard.md +613 -613
  21. package/{tech_hub_skills/skills → .claude/commands}/finops.md +184 -184
  22. package/{tech_hub_skills/skills → .claude/commands}/frontend-developer.md +108 -108
  23. package/{tech_hub_skills/skills → .claude/commands}/gcp.md +143 -143
  24. package/{tech_hub_skills/skills → .claude/commands}/ml-engineer.md +115 -115
  25. package/{tech_hub_skills/skills → .claude/commands}/mlops.md +187 -187
  26. package/{tech_hub_skills/skills → .claude/commands}/network-engineer.md +109 -109
  27. package/{tech_hub_skills/skills → .claude/commands}/optimization-advisor.md +329 -329
  28. package/{tech_hub_skills/skills → .claude/commands}/orchestrator.md +623 -623
  29. package/{tech_hub_skills/skills → .claude/commands}/platform-engineer.md +102 -102
  30. package/{tech_hub_skills/skills → .claude/commands}/process-automation.md +226 -226
  31. package/{tech_hub_skills/skills → .claude/commands}/process-changelog.md +184 -184
  32. package/{tech_hub_skills/skills → .claude/commands}/process-documentation.md +484 -484
  33. package/{tech_hub_skills/skills → .claude/commands}/process-kanban.md +324 -324
  34. package/{tech_hub_skills/skills → .claude/commands}/process-versioning.md +214 -214
  35. package/{tech_hub_skills/skills → .claude/commands}/product-designer.md +104 -104
  36. package/{tech_hub_skills/skills → .claude/commands}/project-starter.md +443 -443
  37. package/{tech_hub_skills/skills → .claude/commands}/qa-engineer.md +109 -109
  38. package/{tech_hub_skills/skills → .claude/commands}/security-architect.md +135 -135
  39. package/{tech_hub_skills/skills → .claude/commands}/sre.md +109 -109
  40. package/{tech_hub_skills/skills → .claude/commands}/system-design.md +126 -126
  41. package/{tech_hub_skills/skills → .claude/commands}/technical-writer.md +101 -101
  42. package/.claude/package.json +46 -0
  43. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/01-prompt-engineering/README.md +252 -252
  44. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_ab_tester.py +356 -0
  45. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_template_manager.py +274 -0
  46. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/token_cost_estimator.py +324 -0
  47. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/02-rag-pipeline/README.md +448 -448
  48. package/.claude/roles/ai-engineer/skills/02-rag-pipeline/document_chunker.py +336 -0
  49. package/.claude/roles/ai-engineer/skills/02-rag-pipeline/rag_pipeline.sql +213 -0
  50. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/03-agent-orchestration/README.md +599 -599
  51. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/04-llm-guardrails/README.md +735 -735
  52. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/05-vector-embeddings/README.md +711 -711
  53. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/06-llm-evaluation/README.md +777 -777
  54. package/{tech_hub_skills → .claude}/roles/azure/skills/01-infrastructure-fundamentals/README.md +264 -264
  55. package/{tech_hub_skills → .claude}/roles/azure/skills/02-data-factory/README.md +264 -264
  56. package/{tech_hub_skills → .claude}/roles/azure/skills/03-synapse-analytics/README.md +264 -264
  57. package/{tech_hub_skills → .claude}/roles/azure/skills/04-databricks/README.md +264 -264
  58. package/{tech_hub_skills → .claude}/roles/azure/skills/05-functions/README.md +264 -264
  59. package/{tech_hub_skills → .claude}/roles/azure/skills/06-kubernetes-service/README.md +264 -264
  60. package/{tech_hub_skills → .claude}/roles/azure/skills/07-openai-service/README.md +264 -264
  61. package/{tech_hub_skills → .claude}/roles/azure/skills/08-machine-learning/README.md +264 -264
  62. package/{tech_hub_skills → .claude}/roles/azure/skills/09-storage-adls/README.md +264 -264
  63. package/{tech_hub_skills → .claude}/roles/azure/skills/10-networking/README.md +264 -264
  64. package/{tech_hub_skills → .claude}/roles/azure/skills/11-sql-cosmos/README.md +264 -264
  65. package/{tech_hub_skills → .claude}/roles/azure/skills/12-event-hubs/README.md +264 -264
  66. package/{tech_hub_skills → .claude}/roles/code-review/skills/01-automated-code-review/README.md +394 -394
  67. package/{tech_hub_skills → .claude}/roles/code-review/skills/02-pr-review-workflow/README.md +427 -427
  68. package/{tech_hub_skills → .claude}/roles/code-review/skills/03-code-quality-gates/README.md +518 -518
  69. package/{tech_hub_skills → .claude}/roles/code-review/skills/04-reviewer-assignment/README.md +504 -504
  70. package/{tech_hub_skills → .claude}/roles/code-review/skills/05-review-analytics/README.md +540 -540
  71. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/01-lakehouse-architecture/README.md +550 -550
  72. package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/bronze_ingestion.py +337 -0
  73. package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/medallion_queries.sql +300 -0
  74. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/02-etl-pipeline/README.md +580 -580
  75. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/03-data-quality/README.md +579 -579
  76. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/04-streaming-pipelines/README.md +608 -608
  77. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/05-performance-optimization/README.md +547 -547
  78. package/{tech_hub_skills → .claude}/roles/data-governance/skills/01-data-catalog/README.md +112 -112
  79. package/{tech_hub_skills → .claude}/roles/data-governance/skills/02-data-lineage/README.md +129 -129
  80. package/{tech_hub_skills → .claude}/roles/data-governance/skills/03-data-quality-framework/README.md +182 -182
  81. package/{tech_hub_skills → .claude}/roles/data-governance/skills/04-access-control/README.md +39 -39
  82. package/{tech_hub_skills → .claude}/roles/data-governance/skills/05-master-data-management/README.md +40 -40
  83. package/{tech_hub_skills → .claude}/roles/data-governance/skills/06-compliance-privacy/README.md +46 -46
  84. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/01-eda-automation/README.md +230 -230
  85. package/.claude/roles/data-scientist/skills/01-eda-automation/eda_generator.py +446 -0
  86. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/02-statistical-modeling/README.md +264 -264
  87. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/03-feature-engineering/README.md +264 -264
  88. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/04-predictive-modeling/README.md +264 -264
  89. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/05-customer-analytics/README.md +264 -264
  90. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/06-campaign-analysis/README.md +264 -264
  91. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/07-experimentation/README.md +264 -264
  92. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/08-data-visualization/README.md +264 -264
  93. package/{tech_hub_skills → .claude}/roles/devops/skills/01-cicd-pipeline/README.md +264 -264
  94. package/{tech_hub_skills → .claude}/roles/devops/skills/02-container-orchestration/README.md +264 -264
  95. package/{tech_hub_skills → .claude}/roles/devops/skills/03-infrastructure-as-code/README.md +264 -264
  96. package/{tech_hub_skills → .claude}/roles/devops/skills/04-gitops/README.md +264 -264
  97. package/{tech_hub_skills → .claude}/roles/devops/skills/05-environment-management/README.md +264 -264
  98. package/{tech_hub_skills → .claude}/roles/devops/skills/06-automated-testing/README.md +264 -264
  99. package/{tech_hub_skills → .claude}/roles/devops/skills/07-release-management/README.md +264 -264
  100. package/{tech_hub_skills → .claude}/roles/devops/skills/08-monitoring-alerting/README.md +264 -264
  101. package/{tech_hub_skills → .claude}/roles/devops/skills/09-devsecops/README.md +265 -265
  102. package/{tech_hub_skills → .claude}/roles/finops/skills/01-cost-visibility/README.md +264 -264
  103. package/{tech_hub_skills → .claude}/roles/finops/skills/02-resource-tagging/README.md +264 -264
  104. package/{tech_hub_skills → .claude}/roles/finops/skills/03-budget-management/README.md +264 -264
  105. package/{tech_hub_skills → .claude}/roles/finops/skills/04-reserved-instances/README.md +264 -264
  106. package/{tech_hub_skills → .claude}/roles/finops/skills/05-spot-optimization/README.md +264 -264
  107. package/{tech_hub_skills → .claude}/roles/finops/skills/06-storage-tiering/README.md +264 -264
  108. package/{tech_hub_skills → .claude}/roles/finops/skills/07-compute-rightsizing/README.md +264 -264
  109. package/{tech_hub_skills → .claude}/roles/finops/skills/08-chargeback/README.md +264 -264
  110. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/01-mlops-pipeline/README.md +566 -566
  111. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/02-feature-engineering/README.md +655 -655
  112. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/03-model-training/README.md +704 -704
  113. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/04-model-serving/README.md +845 -845
  114. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/05-model-monitoring/README.md +874 -874
  115. package/{tech_hub_skills → .claude}/roles/mlops/skills/01-ml-pipeline-orchestration/README.md +264 -264
  116. package/{tech_hub_skills → .claude}/roles/mlops/skills/02-experiment-tracking/README.md +264 -264
  117. package/{tech_hub_skills → .claude}/roles/mlops/skills/03-model-registry/README.md +264 -264
  118. package/{tech_hub_skills → .claude}/roles/mlops/skills/04-feature-store/README.md +264 -264
  119. package/{tech_hub_skills → .claude}/roles/mlops/skills/05-model-deployment/README.md +264 -264
  120. package/{tech_hub_skills → .claude}/roles/mlops/skills/06-model-observability/README.md +264 -264
  121. package/{tech_hub_skills → .claude}/roles/mlops/skills/07-data-versioning/README.md +264 -264
  122. package/{tech_hub_skills → .claude}/roles/mlops/skills/08-ab-testing/README.md +264 -264
  123. package/{tech_hub_skills → .claude}/roles/mlops/skills/09-automated-retraining/README.md +264 -264
  124. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/01-internal-developer-platform/README.md +153 -153
  125. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/02-self-service-infrastructure/README.md +57 -57
  126. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/03-slo-sli-management/README.md +59 -59
  127. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/04-developer-experience/README.md +57 -57
  128. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/05-incident-management/README.md +73 -73
  129. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/06-capacity-management/README.md +59 -59
  130. package/{tech_hub_skills → .claude}/roles/product-designer/skills/01-requirements-discovery/README.md +407 -407
  131. package/{tech_hub_skills → .claude}/roles/product-designer/skills/02-user-research/README.md +382 -382
  132. package/{tech_hub_skills → .claude}/roles/product-designer/skills/03-brainstorming-ideation/README.md +437 -437
  133. package/{tech_hub_skills → .claude}/roles/product-designer/skills/04-ux-design/README.md +496 -496
  134. package/{tech_hub_skills → .claude}/roles/product-designer/skills/05-product-market-fit/README.md +376 -376
  135. package/{tech_hub_skills → .claude}/roles/product-designer/skills/06-stakeholder-management/README.md +412 -412
  136. package/{tech_hub_skills → .claude}/roles/security-architect/skills/01-pii-detection/README.md +319 -319
  137. package/{tech_hub_skills → .claude}/roles/security-architect/skills/02-threat-modeling/README.md +264 -264
  138. package/{tech_hub_skills → .claude}/roles/security-architect/skills/03-infrastructure-security/README.md +264 -264
  139. package/{tech_hub_skills → .claude}/roles/security-architect/skills/04-iam/README.md +264 -264
  140. package/{tech_hub_skills → .claude}/roles/security-architect/skills/05-application-security/README.md +264 -264
  141. package/{tech_hub_skills → .claude}/roles/security-architect/skills/06-secrets-management/README.md +264 -264
  142. package/{tech_hub_skills → .claude}/roles/security-architect/skills/07-security-monitoring/README.md +264 -264
  143. package/{tech_hub_skills → .claude}/roles/system-design/skills/01-architecture-patterns/README.md +337 -337
  144. package/{tech_hub_skills → .claude}/roles/system-design/skills/02-requirements-engineering/README.md +264 -264
  145. package/{tech_hub_skills → .claude}/roles/system-design/skills/03-scalability/README.md +264 -264
  146. package/{tech_hub_skills → .claude}/roles/system-design/skills/04-high-availability/README.md +264 -264
  147. package/{tech_hub_skills → .claude}/roles/system-design/skills/05-cost-optimization-design/README.md +264 -264
  148. package/{tech_hub_skills → .claude}/roles/system-design/skills/06-api-design/README.md +264 -264
  149. package/{tech_hub_skills → .claude}/roles/system-design/skills/07-observability-architecture/README.md +264 -264
  150. package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/PROCESS_TEMPLATE.md +336 -336
  151. package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/README.md +521 -521
  152. package/.claude/roles/system-design/skills/08-process-automation/ai_prompt_generator.py +744 -0
  153. package/.claude/roles/system-design/skills/08-process-automation/automation_recommender.py +688 -0
  154. package/.claude/roles/system-design/skills/08-process-automation/plan_generator.py +679 -0
  155. package/.claude/roles/system-design/skills/08-process-automation/process_analyzer.py +528 -0
  156. package/.claude/roles/system-design/skills/08-process-automation/process_parser.py +684 -0
  157. package/.claude/roles/system-design/skills/08-process-automation/role_matcher.py +615 -0
  158. package/.claude/skills/README.md +336 -0
  159. package/.claude/skills/ai-engineer.md +104 -0
  160. package/.claude/skills/aws.md +143 -0
  161. package/.claude/skills/azure.md +149 -0
  162. package/.claude/skills/backend-developer.md +108 -0
  163. package/.claude/skills/code-review.md +399 -0
  164. package/.claude/skills/compliance-automation.md +747 -0
  165. package/.claude/skills/compliance-officer.md +108 -0
  166. package/.claude/skills/data-engineer.md +113 -0
  167. package/.claude/skills/data-governance.md +102 -0
  168. package/.claude/skills/data-scientist.md +123 -0
  169. package/.claude/skills/database-admin.md +109 -0
  170. package/.claude/skills/devops.md +160 -0
  171. package/.claude/skills/docker.md +160 -0
  172. package/.claude/skills/enterprise-dashboard.md +613 -0
  173. package/.claude/skills/finops.md +184 -0
  174. package/.claude/skills/frontend-developer.md +108 -0
  175. package/.claude/skills/gcp.md +143 -0
  176. package/.claude/skills/ml-engineer.md +115 -0
  177. package/.claude/skills/mlops.md +187 -0
  178. package/.claude/skills/network-engineer.md +109 -0
  179. package/.claude/skills/optimization-advisor.md +329 -0
  180. package/.claude/skills/orchestrator.md +623 -0
  181. package/.claude/skills/platform-engineer.md +102 -0
  182. package/.claude/skills/process-automation.md +226 -0
  183. package/.claude/skills/process-changelog.md +184 -0
  184. package/.claude/skills/process-documentation.md +484 -0
  185. package/.claude/skills/process-kanban.md +324 -0
  186. package/.claude/skills/process-versioning.md +214 -0
  187. package/.claude/skills/product-designer.md +104 -0
  188. package/.claude/skills/project-starter.md +443 -0
  189. package/.claude/skills/qa-engineer.md +109 -0
  190. package/.claude/skills/security-architect.md +135 -0
  191. package/.claude/skills/sre.md +109 -0
  192. package/.claude/skills/system-design.md +126 -0
  193. package/.claude/skills/technical-writer.md +101 -0
  194. package/.gitattributes +2 -0
  195. package/GITHUB_COPILOT.md +106 -0
  196. package/README.md +192 -291
  197. package/package.json +16 -46
  198. package/bin/cli.js +0 -241
@@ -0,0 +1,688 @@
1
+ """
2
+ Automation Recommender - Recommends optimal automation strategies.
3
+
4
+ Part of the Tech Hub Skills Library (sd-08: Process Automation).
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import List, Dict, Optional, Tuple
9
+ from enum import Enum
10
+
11
+ from process_analyzer import ProcessAnalysis, ProcessComplexity, AutomationType
12
+
13
+
14
+ class AutomationApproach(Enum):
15
+ """High-level automation approaches."""
16
+ BUILD = "build" # Custom development
17
+ BUY = "buy" # Purchase existing solution
18
+ CONFIGURE = "configure" # Configure existing tools
19
+ HYBRID = "hybrid" # Mix of approaches
20
+
21
+
22
+ class RiskLevel(Enum):
23
+ """Risk levels for automation initiatives."""
24
+ LOW = "low"
25
+ MEDIUM = "medium"
26
+ HIGH = "high"
27
+ CRITICAL = "critical"
28
+
29
+
30
+ @dataclass
31
+ class ToolRecommendation:
32
+ """A recommended tool for automation."""
33
+ name: str
34
+ category: str
35
+ fit_score: float # 0-100
36
+ pros: List[str]
37
+ cons: List[str]
38
+ azure_service: Optional[str] = None
39
+ estimated_cost: str = "varies"
40
+ learning_curve: str = "medium"
41
+
42
+
43
+ @dataclass
44
+ class AutomationStrategy:
45
+ """Complete automation strategy recommendation."""
46
+ primary_approach: AutomationApproach
47
+ automation_types: List[AutomationType]
48
+ recommended_tools: List[ToolRecommendation]
49
+ implementation_phases: List[Dict]
50
+ risk_assessment: Dict
51
+ estimated_effort_weeks: float
52
+ confidence_score: float # 0-100
53
+
54
+ def to_dict(self) -> Dict:
55
+ """Convert to dictionary."""
56
+ return {
57
+ "primary_approach": self.primary_approach.value,
58
+ "automation_types": [t.value for t in self.automation_types],
59
+ "recommended_tools": [
60
+ {
61
+ "name": t.name,
62
+ "category": t.category,
63
+ "fit_score": t.fit_score,
64
+ "azure_service": t.azure_service
65
+ }
66
+ for t in self.recommended_tools
67
+ ],
68
+ "phases": self.implementation_phases,
69
+ "risk_assessment": self.risk_assessment,
70
+ "effort_weeks": self.estimated_effort_weeks,
71
+ "confidence": self.confidence_score
72
+ }
73
+
74
+
75
+ class AutomationRecommender:
76
+ """
77
+ Recommends optimal automation strategies based on process analysis.
78
+
79
+ Evaluates multiple automation approaches and provides detailed
80
+ recommendations including tools, patterns, and implementation guidance.
81
+ """
82
+
83
+ # Tool catalog by automation type
84
+ TOOL_CATALOG = {
85
+ AutomationType.RPA: [
86
+ ToolRecommendation(
87
+ name="Power Automate",
88
+ category="RPA/Workflow",
89
+ fit_score=85,
90
+ pros=["Azure native", "Low-code", "Office 365 integration"],
91
+ cons=["Limited for complex logic", "Licensing costs"],
92
+ azure_service="Power Platform",
93
+ estimated_cost="$15/user/month",
94
+ learning_curve="low"
95
+ ),
96
+ ToolRecommendation(
97
+ name="UiPath",
98
+ category="RPA",
99
+ fit_score=90,
100
+ pros=["Enterprise-grade", "AI capabilities", "Large community"],
101
+ cons=["Higher cost", "Steeper learning curve"],
102
+ estimated_cost="$420/robot/month",
103
+ learning_curve="medium"
104
+ ),
105
+ ],
106
+ AutomationType.WORKFLOW: [
107
+ ToolRecommendation(
108
+ name="Azure Logic Apps",
109
+ category="Workflow",
110
+ fit_score=88,
111
+ pros=["Azure native", "400+ connectors", "Serverless"],
112
+ cons=["Consumption pricing can spike", "Limited debugging"],
113
+ azure_service="Logic Apps",
114
+ estimated_cost="Pay-per-execution",
115
+ learning_curve="low"
116
+ ),
117
+ ToolRecommendation(
118
+ name="Apache Airflow",
119
+ category="Workflow Orchestration",
120
+ fit_score=85,
121
+ pros=["Open source", "Python-native", "Highly flexible"],
122
+ cons=["Requires infrastructure", "Steeper learning curve"],
123
+ azure_service="Azure Container Apps",
124
+ estimated_cost="Infrastructure only",
125
+ learning_curve="medium"
126
+ ),
127
+ ],
128
+ AutomationType.DATA_PIPELINE: [
129
+ ToolRecommendation(
130
+ name="Azure Data Factory",
131
+ category="Data Integration",
132
+ fit_score=92,
133
+ pros=["Azure native", "90+ connectors", "Mapping data flows"],
134
+ cons=["Complex pricing", "Limited transformations"],
135
+ azure_service="Data Factory",
136
+ estimated_cost="Pay-per-activity",
137
+ learning_curve="medium"
138
+ ),
139
+ ToolRecommendation(
140
+ name="Azure Synapse Pipelines",
141
+ category="Data Integration",
142
+ fit_score=88,
143
+ pros=["Unified analytics", "Spark integration", "Serverless SQL"],
144
+ cons=["Overkill for simple ETL", "Higher cost"],
145
+ azure_service="Synapse Analytics",
146
+ estimated_cost="Varies by usage",
147
+ learning_curve="medium"
148
+ ),
149
+ ToolRecommendation(
150
+ name="dbt",
151
+ category="Data Transformation",
152
+ fit_score=85,
153
+ pros=["SQL-first", "Version control", "Testing built-in"],
154
+ cons=["Transformation only", "Requires warehouse"],
155
+ azure_service="Azure Synapse/Databricks",
156
+ estimated_cost="Free (open source)",
157
+ learning_curve="low"
158
+ ),
159
+ ],
160
+ AutomationType.ML_BASED: [
161
+ ToolRecommendation(
162
+ name="Azure Machine Learning",
163
+ category="ML Platform",
164
+ fit_score=90,
165
+ pros=["Full MLOps", "AutoML", "Managed endpoints"],
166
+ cons=["Complexity", "Cost at scale"],
167
+ azure_service="Azure ML",
168
+ estimated_cost="Compute-based",
169
+ learning_curve="high"
170
+ ),
171
+ ToolRecommendation(
172
+ name="MLflow",
173
+ category="ML Lifecycle",
174
+ fit_score=85,
175
+ pros=["Open source", "Experiment tracking", "Model registry"],
176
+ cons=["Requires hosting", "Basic UI"],
177
+ azure_service="Azure ML (integrated)",
178
+ estimated_cost="Free (open source)",
179
+ learning_curve="medium"
180
+ ),
181
+ ],
182
+ AutomationType.AI_POWERED: [
183
+ ToolRecommendation(
184
+ name="Azure OpenAI Service",
185
+ category="LLM Platform",
186
+ fit_score=95,
187
+ pros=["GPT-4 access", "Enterprise security", "Azure integration"],
188
+ cons=["Token costs", "Rate limits"],
189
+ azure_service="Azure OpenAI",
190
+ estimated_cost="$0.01-0.12/1K tokens",
191
+ learning_curve="medium"
192
+ ),
193
+ ToolRecommendation(
194
+ name="LangChain",
195
+ category="LLM Framework",
196
+ fit_score=82,
197
+ pros=["Flexible", "Many integrations", "Active community"],
198
+ cons=["Rapid changes", "Abstraction overhead"],
199
+ estimated_cost="Free (open source)",
200
+ learning_curve="medium"
201
+ ),
202
+ ToolRecommendation(
203
+ name="Semantic Kernel",
204
+ category="LLM Orchestration",
205
+ fit_score=85,
206
+ pros=["Microsoft backed", "C#/Python", "Azure native"],
207
+ cons=["Newer ecosystem", "Less examples"],
208
+ azure_service="Azure OpenAI",
209
+ estimated_cost="Free (open source)",
210
+ learning_curve="medium"
211
+ ),
212
+ ],
213
+ AutomationType.INFRASTRUCTURE: [
214
+ ToolRecommendation(
215
+ name="Terraform",
216
+ category="IaC",
217
+ fit_score=92,
218
+ pros=["Multi-cloud", "Large community", "State management"],
219
+ cons=["HCL learning curve", "State file management"],
220
+ azure_service="Any",
221
+ estimated_cost="Free (open source)",
222
+ learning_curve="medium"
223
+ ),
224
+ ToolRecommendation(
225
+ name="Bicep",
226
+ category="IaC",
227
+ fit_score=88,
228
+ pros=["Azure native", "ARM simplified", "VS Code support"],
229
+ cons=["Azure only", "Smaller community"],
230
+ azure_service="Azure Resource Manager",
231
+ estimated_cost="Free",
232
+ learning_curve="low"
233
+ ),
234
+ ],
235
+ AutomationType.SECURITY: [
236
+ ToolRecommendation(
237
+ name="Microsoft Defender for Cloud",
238
+ category="Security Posture",
239
+ fit_score=90,
240
+ pros=["Azure native", "CSPM/CWPP", "Compliance"],
241
+ cons=["Cost at scale", "Alert fatigue"],
242
+ azure_service="Defender for Cloud",
243
+ estimated_cost="$15/server/month",
244
+ learning_curve="medium"
245
+ ),
246
+ ToolRecommendation(
247
+ name="Azure Policy",
248
+ category="Governance",
249
+ fit_score=88,
250
+ pros=["Free", "Preventive controls", "Built-in policies"],
251
+ cons=["Limited remediation", "Policy as code learning"],
252
+ azure_service="Azure Policy",
253
+ estimated_cost="Free",
254
+ learning_curve="medium"
255
+ ),
256
+ ],
257
+ }
258
+
259
+ def __init__(self):
260
+ """Initialize the recommender."""
261
+ pass
262
+
263
+ def recommend(
264
+ self,
265
+ analysis: ProcessAnalysis,
266
+ budget_constraint: Optional[float] = None,
267
+ timeline_weeks: Optional[int] = None,
268
+ prefer_azure_native: bool = True
269
+ ) -> AutomationStrategy:
270
+ """
271
+ Generate automation strategy recommendations.
272
+
273
+ Args:
274
+ analysis: Process analysis from ProcessAnalyzer
275
+ budget_constraint: Maximum budget (optional)
276
+ timeline_weeks: Target timeline in weeks (optional)
277
+ prefer_azure_native: Prefer Azure-native solutions
278
+
279
+ Returns:
280
+ Complete AutomationStrategy recommendation
281
+ """
282
+ # Determine primary approach
283
+ primary_approach = self._determine_approach(analysis, budget_constraint)
284
+
285
+ # Get tool recommendations
286
+ tools = self._recommend_tools(
287
+ analysis.automation_types,
288
+ prefer_azure_native
289
+ )
290
+
291
+ # Generate implementation phases
292
+ phases = self._generate_phases(analysis, tools)
293
+
294
+ # Assess risks
295
+ risks = self._assess_risks(analysis)
296
+
297
+ # Estimate effort
298
+ effort = self._estimate_effort(analysis, primary_approach)
299
+
300
+ # Calculate confidence
301
+ confidence = self._calculate_confidence(analysis, tools)
302
+
303
+ return AutomationStrategy(
304
+ primary_approach=primary_approach,
305
+ automation_types=analysis.automation_types,
306
+ recommended_tools=tools,
307
+ implementation_phases=phases,
308
+ risk_assessment=risks,
309
+ estimated_effort_weeks=effort,
310
+ confidence_score=confidence
311
+ )
312
+
313
+ def _determine_approach(
314
+ self,
315
+ analysis: ProcessAnalysis,
316
+ budget: Optional[float]
317
+ ) -> AutomationApproach:
318
+ """Determine build vs buy vs configure."""
319
+ complexity = analysis.complexity
320
+
321
+ if complexity == ProcessComplexity.SIMPLE:
322
+ return AutomationApproach.CONFIGURE
323
+ elif complexity == ProcessComplexity.MODERATE:
324
+ if budget and budget < 50000:
325
+ return AutomationApproach.CONFIGURE
326
+ return AutomationApproach.HYBRID
327
+ elif complexity == ProcessComplexity.COMPLEX:
328
+ return AutomationApproach.HYBRID
329
+ else: # ENTERPRISE
330
+ return AutomationApproach.BUILD
331
+
332
+ def _recommend_tools(
333
+ self,
334
+ automation_types: List[AutomationType],
335
+ prefer_azure: bool
336
+ ) -> List[ToolRecommendation]:
337
+ """Get tool recommendations for automation types."""
338
+ tools = []
339
+ seen_tools = set()
340
+
341
+ for auto_type in automation_types:
342
+ if auto_type in self.TOOL_CATALOG:
343
+ for tool in self.TOOL_CATALOG[auto_type]:
344
+ if tool.name not in seen_tools:
345
+ # Boost Azure-native tools if preferred
346
+ if prefer_azure and tool.azure_service:
347
+ tool.fit_score = min(100, tool.fit_score + 5)
348
+ tools.append(tool)
349
+ seen_tools.add(tool.name)
350
+
351
+ # Sort by fit score
352
+ tools.sort(key=lambda t: t.fit_score, reverse=True)
353
+
354
+ return tools[:8] # Top 8 recommendations
355
+
356
+ def _generate_phases(
357
+ self,
358
+ analysis: ProcessAnalysis,
359
+ tools: List[ToolRecommendation]
360
+ ) -> List[Dict]:
361
+ """Generate implementation phases."""
362
+ phases = []
363
+
364
+ # Phase 1: Foundation
365
+ phases.append({
366
+ "phase": 1,
367
+ "name": "Foundation & Setup",
368
+ "duration_weeks": 1,
369
+ "activities": [
370
+ "Set up development environment",
371
+ "Configure Azure resources",
372
+ "Establish CI/CD pipeline",
373
+ "Document current process baseline"
374
+ ],
375
+ "deliverables": [
376
+ "Infrastructure provisioned",
377
+ "Development environment ready",
378
+ "Baseline metrics captured"
379
+ ],
380
+ "skills_needed": ["do-01", "do-03", "az-01"]
381
+ })
382
+
383
+ # Phase 2: Core Automation (varies by type)
384
+ core_activities = []
385
+ core_skills = []
386
+
387
+ if AutomationType.DATA_PIPELINE in analysis.automation_types:
388
+ core_activities.extend([
389
+ "Build data extraction connectors",
390
+ "Implement transformation logic",
391
+ "Set up data quality checks"
392
+ ])
393
+ core_skills.extend(["de-02", "de-03"])
394
+
395
+ if AutomationType.ML_BASED in analysis.automation_types:
396
+ core_activities.extend([
397
+ "Develop ML model",
398
+ "Set up training pipeline",
399
+ "Configure model serving"
400
+ ])
401
+ core_skills.extend(["ml-01", "ml-03", "ml-04"])
402
+
403
+ if AutomationType.AI_POWERED in analysis.automation_types:
404
+ core_activities.extend([
405
+ "Design prompt templates",
406
+ "Integrate LLM API",
407
+ "Implement guardrails"
408
+ ])
409
+ core_skills.extend(["ai-01", "ai-04", "ai-07"])
410
+
411
+ if AutomationType.WORKFLOW in analysis.automation_types:
412
+ core_activities.extend([
413
+ "Design workflow orchestration",
414
+ "Implement business logic",
415
+ "Configure triggers and schedules"
416
+ ])
417
+ core_skills.extend(["de-02", "do-01"])
418
+
419
+ phases.append({
420
+ "phase": 2,
421
+ "name": "Core Automation Development",
422
+ "duration_weeks": 2,
423
+ "activities": core_activities or ["Implement automation logic"],
424
+ "deliverables": [
425
+ "Core automation components built",
426
+ "Unit tests passing",
427
+ "Integration points defined"
428
+ ],
429
+ "skills_needed": list(set(core_skills)) or ["de-02"]
430
+ })
431
+
432
+ # Phase 3: Integration & Testing
433
+ phases.append({
434
+ "phase": 3,
435
+ "name": "Integration & Testing",
436
+ "duration_weeks": 1,
437
+ "activities": [
438
+ "End-to-end integration testing",
439
+ "Performance testing",
440
+ "Security review",
441
+ "User acceptance testing"
442
+ ],
443
+ "deliverables": [
444
+ "All tests passing",
445
+ "Security approval",
446
+ "UAT sign-off"
447
+ ],
448
+ "skills_needed": ["do-06", "sa-05", "sd-03"]
449
+ })
450
+
451
+ # Phase 4: Deployment & Monitoring
452
+ phases.append({
453
+ "phase": 4,
454
+ "name": "Deployment & Monitoring",
455
+ "duration_weeks": 1,
456
+ "activities": [
457
+ "Deploy to production",
458
+ "Configure monitoring and alerts",
459
+ "Create runbooks",
460
+ "Train users"
461
+ ],
462
+ "deliverables": [
463
+ "Production deployment complete",
464
+ "Monitoring dashboard live",
465
+ "Documentation complete"
466
+ ],
467
+ "skills_needed": ["do-07", "do-08", "sd-07"]
468
+ })
469
+
470
+ return phases
471
+
472
+ def _assess_risks(self, analysis: ProcessAnalysis) -> Dict:
473
+ """Assess automation risks."""
474
+ risks = {
475
+ "overall_level": RiskLevel.LOW.value,
476
+ "factors": [],
477
+ "mitigations": []
478
+ }
479
+
480
+ # Complexity risk
481
+ if analysis.complexity in [ProcessComplexity.COMPLEX, ProcessComplexity.ENTERPRISE]:
482
+ risks["factors"].append({
483
+ "risk": "High process complexity",
484
+ "level": "high",
485
+ "impact": "Implementation delays, cost overruns"
486
+ })
487
+ risks["mitigations"].append(
488
+ "Break into smaller phases with clear milestones"
489
+ )
490
+ risks["overall_level"] = RiskLevel.MEDIUM.value
491
+
492
+ # Data integration risk
493
+ if len(analysis.data_sources_involved) > 3:
494
+ risks["factors"].append({
495
+ "risk": "Multiple data source integration",
496
+ "level": "medium",
497
+ "impact": "Integration complexity, data quality issues"
498
+ })
499
+ risks["mitigations"].append(
500
+ "Implement robust data validation and monitoring"
501
+ )
502
+
503
+ # Stakeholder risk
504
+ if len(analysis.stakeholders) > 4:
505
+ risks["factors"].append({
506
+ "risk": "Many stakeholders",
507
+ "level": "medium",
508
+ "impact": "Conflicting requirements, approval delays"
509
+ })
510
+ risks["mitigations"].append(
511
+ "Establish clear RACI and regular stakeholder updates"
512
+ )
513
+
514
+ # Compliance risk
515
+ if analysis.compliance_requirements:
516
+ risks["factors"].append({
517
+ "risk": "Compliance requirements",
518
+ "level": "high",
519
+ "impact": "Regulatory penalties, project blocks"
520
+ })
521
+ risks["mitigations"].append(
522
+ "Engage Security Architect early, document compliance controls"
523
+ )
524
+ risks["overall_level"] = RiskLevel.HIGH.value
525
+
526
+ # Change management risk
527
+ if analysis.total_time_minutes > 120:
528
+ risks["factors"].append({
529
+ "risk": "Significant process change",
530
+ "level": "medium",
531
+ "impact": "User resistance, adoption challenges"
532
+ })
533
+ risks["mitigations"].append(
534
+ "Develop change management plan with training"
535
+ )
536
+
537
+ return risks
538
+
539
+ def _estimate_effort(
540
+ self,
541
+ analysis: ProcessAnalysis,
542
+ approach: AutomationApproach
543
+ ) -> float:
544
+ """Estimate implementation effort in weeks."""
545
+ base_effort = {
546
+ ProcessComplexity.SIMPLE: 1,
547
+ ProcessComplexity.MODERATE: 3,
548
+ ProcessComplexity.COMPLEX: 6,
549
+ ProcessComplexity.ENTERPRISE: 12
550
+ }
551
+
552
+ approach_multiplier = {
553
+ AutomationApproach.CONFIGURE: 0.5,
554
+ AutomationApproach.BUY: 0.75,
555
+ AutomationApproach.HYBRID: 1.0,
556
+ AutomationApproach.BUILD: 1.5
557
+ }
558
+
559
+ effort = base_effort.get(analysis.complexity, 4)
560
+ effort *= approach_multiplier.get(approach, 1.0)
561
+
562
+ # Add time for integrations
563
+ effort += len(analysis.data_sources_involved) * 0.5
564
+
565
+ # Add time for compliance
566
+ if analysis.compliance_requirements:
567
+ effort += 2
568
+
569
+ return round(effort, 1)
570
+
571
+ def _calculate_confidence(
572
+ self,
573
+ analysis: ProcessAnalysis,
574
+ tools: List[ToolRecommendation]
575
+ ) -> float:
576
+ """Calculate confidence score for recommendations."""
577
+ confidence = 70.0 # Base confidence
578
+
579
+ # Higher automation score = higher confidence
580
+ confidence += (analysis.automation_score - 50) * 0.3
581
+
582
+ # More tool options = higher confidence
583
+ if len(tools) >= 5:
584
+ confidence += 10
585
+
586
+ # Simpler processes = higher confidence
587
+ complexity_adjustment = {
588
+ ProcessComplexity.SIMPLE: 15,
589
+ ProcessComplexity.MODERATE: 5,
590
+ ProcessComplexity.COMPLEX: -5,
591
+ ProcessComplexity.ENTERPRISE: -15
592
+ }
593
+ confidence += complexity_adjustment.get(analysis.complexity, 0)
594
+
595
+ return max(0, min(100, round(confidence, 1)))
596
+
597
+ def compare_approaches(
598
+ self,
599
+ analysis: ProcessAnalysis
600
+ ) -> List[Dict]:
601
+ """Compare different automation approaches."""
602
+ approaches = []
603
+
604
+ for approach in AutomationApproach:
605
+ effort = self._estimate_effort(analysis, approach)
606
+
607
+ cost_multiplier = {
608
+ AutomationApproach.CONFIGURE: 0.3,
609
+ AutomationApproach.BUY: 0.6,
610
+ AutomationApproach.HYBRID: 1.0,
611
+ AutomationApproach.BUILD: 1.5
612
+ }
613
+
614
+ flexibility_score = {
615
+ AutomationApproach.CONFIGURE: 40,
616
+ AutomationApproach.BUY: 50,
617
+ AutomationApproach.HYBRID: 75,
618
+ AutomationApproach.BUILD: 95
619
+ }
620
+
621
+ approaches.append({
622
+ "approach": approach.value,
623
+ "effort_weeks": effort,
624
+ "relative_cost": cost_multiplier.get(approach, 1.0),
625
+ "flexibility_score": flexibility_score.get(approach, 50),
626
+ "best_for": self._get_approach_best_for(approach)
627
+ })
628
+
629
+ return approaches
630
+
631
+ def _get_approach_best_for(self, approach: AutomationApproach) -> str:
632
+ """Get description of when approach is best."""
633
+ descriptions = {
634
+ AutomationApproach.CONFIGURE: "Simple processes, tight timelines, limited budget",
635
+ AutomationApproach.BUY: "Standard processes, quick deployment needed",
636
+ AutomationApproach.HYBRID: "Most scenarios, balance of speed and flexibility",
637
+ AutomationApproach.BUILD: "Unique requirements, competitive advantage, full control"
638
+ }
639
+ return descriptions.get(approach, "General use")
640
+
641
+
642
+ # Example usage
643
+ if __name__ == "__main__":
644
+ from process_analyzer import ProcessAnalyzer
645
+
646
+ # First analyze the process
647
+ analyzer = ProcessAnalyzer()
648
+ analysis = analyzer.analyze_process(
649
+ name="Customer Onboarding",
650
+ description="Onboard new enterprise customers",
651
+ steps=[
652
+ {"name": "Receive application", "time_minutes": 5, "manual": False},
653
+ {"name": "Verify documents", "time_minutes": 45, "manual": True, "requires_expertise": True},
654
+ {"name": "Credit check", "time_minutes": 30, "manual": True, "data_sources": ["Credit Bureau"]},
655
+ {"name": "Risk assessment", "time_minutes": 60, "manual": True, "requires_decision": True},
656
+ {"name": "Generate contract", "time_minutes": 20, "manual": True},
657
+ {"name": "Send for signature", "time_minutes": 10, "manual": True},
658
+ {"name": "Setup account", "time_minutes": 30, "manual": True, "tools_used": ["CRM", "ERP"]}
659
+ ],
660
+ frequency="daily",
661
+ stakeholders=["Sales", "Risk", "Legal", "Operations"],
662
+ compliance_requirements=["KYC", "AML"]
663
+ )
664
+
665
+ # Get recommendations
666
+ recommender = AutomationRecommender()
667
+ strategy = recommender.recommend(analysis, prefer_azure_native=True)
668
+
669
+ print("=" * 60)
670
+ print("AUTOMATION STRATEGY RECOMMENDATION")
671
+ print("=" * 60)
672
+ print(f"\nPrimary Approach: {strategy.primary_approach.value.upper()}")
673
+ print(f"Estimated Effort: {strategy.estimated_effort_weeks} weeks")
674
+ print(f"Confidence Score: {strategy.confidence_score}%")
675
+
676
+ print(f"\nRecommended Tools:")
677
+ for tool in strategy.recommended_tools[:5]:
678
+ print(f" - {tool.name} ({tool.category}): {tool.fit_score}% fit")
679
+ if tool.azure_service:
680
+ print(f" Azure: {tool.azure_service}")
681
+
682
+ print(f"\nImplementation Phases:")
683
+ for phase in strategy.implementation_phases:
684
+ print(f" Phase {phase['phase']}: {phase['name']} ({phase['duration_weeks']}w)")
685
+
686
+ print(f"\nRisk Assessment: {strategy.risk_assessment['overall_level'].upper()}")
687
+ for risk in strategy.risk_assessment['factors']:
688
+ print(f" - {risk['risk']} ({risk['level']})")