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.
- package/{LICENSE → .claude/LICENSE} +21 -21
- package/.claude/README.md +291 -0
- package/.claude/bin/cli.js +266 -0
- package/{bin → .claude/bin}/copilot.js +182 -182
- package/{bin → .claude/bin}/postinstall.js +42 -42
- package/{tech_hub_skills/skills → .claude/commands}/README.md +336 -336
- package/{tech_hub_skills/skills → .claude/commands}/ai-engineer.md +104 -104
- package/{tech_hub_skills/skills → .claude/commands}/aws.md +143 -143
- package/{tech_hub_skills/skills → .claude/commands}/azure.md +149 -149
- package/{tech_hub_skills/skills → .claude/commands}/backend-developer.md +108 -108
- package/{tech_hub_skills/skills → .claude/commands}/code-review.md +399 -399
- package/{tech_hub_skills/skills → .claude/commands}/compliance-automation.md +747 -747
- package/{tech_hub_skills/skills → .claude/commands}/compliance-officer.md +108 -108
- package/{tech_hub_skills/skills → .claude/commands}/data-engineer.md +113 -113
- package/{tech_hub_skills/skills → .claude/commands}/data-governance.md +102 -102
- package/{tech_hub_skills/skills → .claude/commands}/data-scientist.md +123 -123
- package/{tech_hub_skills/skills → .claude/commands}/database-admin.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/devops.md +160 -160
- package/{tech_hub_skills/skills → .claude/commands}/docker.md +160 -160
- package/{tech_hub_skills/skills → .claude/commands}/enterprise-dashboard.md +613 -613
- package/{tech_hub_skills/skills → .claude/commands}/finops.md +184 -184
- package/{tech_hub_skills/skills → .claude/commands}/frontend-developer.md +108 -108
- package/{tech_hub_skills/skills → .claude/commands}/gcp.md +143 -143
- package/{tech_hub_skills/skills → .claude/commands}/ml-engineer.md +115 -115
- package/{tech_hub_skills/skills → .claude/commands}/mlops.md +187 -187
- package/{tech_hub_skills/skills → .claude/commands}/network-engineer.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/optimization-advisor.md +329 -329
- package/{tech_hub_skills/skills → .claude/commands}/orchestrator.md +623 -623
- package/{tech_hub_skills/skills → .claude/commands}/platform-engineer.md +102 -102
- package/{tech_hub_skills/skills → .claude/commands}/process-automation.md +226 -226
- package/{tech_hub_skills/skills → .claude/commands}/process-changelog.md +184 -184
- package/{tech_hub_skills/skills → .claude/commands}/process-documentation.md +484 -484
- package/{tech_hub_skills/skills → .claude/commands}/process-kanban.md +324 -324
- package/{tech_hub_skills/skills → .claude/commands}/process-versioning.md +214 -214
- package/{tech_hub_skills/skills → .claude/commands}/product-designer.md +104 -104
- package/{tech_hub_skills/skills → .claude/commands}/project-starter.md +443 -443
- package/{tech_hub_skills/skills → .claude/commands}/qa-engineer.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/security-architect.md +135 -135
- package/{tech_hub_skills/skills → .claude/commands}/sre.md +109 -109
- package/{tech_hub_skills/skills → .claude/commands}/system-design.md +126 -126
- package/{tech_hub_skills/skills → .claude/commands}/technical-writer.md +101 -101
- package/.claude/package.json +46 -0
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/01-prompt-engineering/README.md +252 -252
- package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_ab_tester.py +356 -0
- package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_template_manager.py +274 -0
- package/.claude/roles/ai-engineer/skills/01-prompt-engineering/token_cost_estimator.py +324 -0
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/02-rag-pipeline/README.md +448 -448
- package/.claude/roles/ai-engineer/skills/02-rag-pipeline/document_chunker.py +336 -0
- package/.claude/roles/ai-engineer/skills/02-rag-pipeline/rag_pipeline.sql +213 -0
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/03-agent-orchestration/README.md +599 -599
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/04-llm-guardrails/README.md +735 -735
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/05-vector-embeddings/README.md +711 -711
- package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/06-llm-evaluation/README.md +777 -777
- package/{tech_hub_skills → .claude}/roles/azure/skills/01-infrastructure-fundamentals/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/02-data-factory/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/03-synapse-analytics/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/04-databricks/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/05-functions/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/06-kubernetes-service/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/07-openai-service/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/08-machine-learning/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/09-storage-adls/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/10-networking/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/11-sql-cosmos/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/azure/skills/12-event-hubs/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/code-review/skills/01-automated-code-review/README.md +394 -394
- package/{tech_hub_skills → .claude}/roles/code-review/skills/02-pr-review-workflow/README.md +427 -427
- package/{tech_hub_skills → .claude}/roles/code-review/skills/03-code-quality-gates/README.md +518 -518
- package/{tech_hub_skills → .claude}/roles/code-review/skills/04-reviewer-assignment/README.md +504 -504
- package/{tech_hub_skills → .claude}/roles/code-review/skills/05-review-analytics/README.md +540 -540
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/01-lakehouse-architecture/README.md +550 -550
- package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/bronze_ingestion.py +337 -0
- package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/medallion_queries.sql +300 -0
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/02-etl-pipeline/README.md +580 -580
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/03-data-quality/README.md +579 -579
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/04-streaming-pipelines/README.md +608 -608
- package/{tech_hub_skills → .claude}/roles/data-engineer/skills/05-performance-optimization/README.md +547 -547
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/01-data-catalog/README.md +112 -112
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/02-data-lineage/README.md +129 -129
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/03-data-quality-framework/README.md +182 -182
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/04-access-control/README.md +39 -39
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/05-master-data-management/README.md +40 -40
- package/{tech_hub_skills → .claude}/roles/data-governance/skills/06-compliance-privacy/README.md +46 -46
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/01-eda-automation/README.md +230 -230
- package/.claude/roles/data-scientist/skills/01-eda-automation/eda_generator.py +446 -0
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/02-statistical-modeling/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/03-feature-engineering/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/04-predictive-modeling/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/05-customer-analytics/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/06-campaign-analysis/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/07-experimentation/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/data-scientist/skills/08-data-visualization/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/01-cicd-pipeline/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/02-container-orchestration/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/03-infrastructure-as-code/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/04-gitops/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/05-environment-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/06-automated-testing/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/07-release-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/08-monitoring-alerting/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/devops/skills/09-devsecops/README.md +265 -265
- package/{tech_hub_skills → .claude}/roles/finops/skills/01-cost-visibility/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/02-resource-tagging/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/03-budget-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/04-reserved-instances/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/05-spot-optimization/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/06-storage-tiering/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/07-compute-rightsizing/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/finops/skills/08-chargeback/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/01-mlops-pipeline/README.md +566 -566
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/02-feature-engineering/README.md +655 -655
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/03-model-training/README.md +704 -704
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/04-model-serving/README.md +845 -845
- package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/05-model-monitoring/README.md +874 -874
- package/{tech_hub_skills → .claude}/roles/mlops/skills/01-ml-pipeline-orchestration/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/02-experiment-tracking/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/03-model-registry/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/04-feature-store/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/05-model-deployment/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/06-model-observability/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/07-data-versioning/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/08-ab-testing/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/mlops/skills/09-automated-retraining/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/01-internal-developer-platform/README.md +153 -153
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/02-self-service-infrastructure/README.md +57 -57
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/03-slo-sli-management/README.md +59 -59
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/04-developer-experience/README.md +57 -57
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/05-incident-management/README.md +73 -73
- package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/06-capacity-management/README.md +59 -59
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/01-requirements-discovery/README.md +407 -407
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/02-user-research/README.md +382 -382
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/03-brainstorming-ideation/README.md +437 -437
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/04-ux-design/README.md +496 -496
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/05-product-market-fit/README.md +376 -376
- package/{tech_hub_skills → .claude}/roles/product-designer/skills/06-stakeholder-management/README.md +412 -412
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/01-pii-detection/README.md +319 -319
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/02-threat-modeling/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/03-infrastructure-security/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/04-iam/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/05-application-security/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/06-secrets-management/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/security-architect/skills/07-security-monitoring/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/01-architecture-patterns/README.md +337 -337
- package/{tech_hub_skills → .claude}/roles/system-design/skills/02-requirements-engineering/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/03-scalability/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/04-high-availability/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/05-cost-optimization-design/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/06-api-design/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/07-observability-architecture/README.md +264 -264
- package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/PROCESS_TEMPLATE.md +336 -336
- package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/README.md +521 -521
- package/.claude/roles/system-design/skills/08-process-automation/ai_prompt_generator.py +744 -0
- package/.claude/roles/system-design/skills/08-process-automation/automation_recommender.py +688 -0
- package/.claude/roles/system-design/skills/08-process-automation/plan_generator.py +679 -0
- package/.claude/roles/system-design/skills/08-process-automation/process_analyzer.py +528 -0
- package/.claude/roles/system-design/skills/08-process-automation/process_parser.py +684 -0
- package/.claude/roles/system-design/skills/08-process-automation/role_matcher.py +615 -0
- package/.claude/skills/README.md +336 -0
- package/.claude/skills/ai-engineer.md +104 -0
- package/.claude/skills/aws.md +143 -0
- package/.claude/skills/azure.md +149 -0
- package/.claude/skills/backend-developer.md +108 -0
- package/.claude/skills/code-review.md +399 -0
- package/.claude/skills/compliance-automation.md +747 -0
- package/.claude/skills/compliance-officer.md +108 -0
- package/.claude/skills/data-engineer.md +113 -0
- package/.claude/skills/data-governance.md +102 -0
- package/.claude/skills/data-scientist.md +123 -0
- package/.claude/skills/database-admin.md +109 -0
- package/.claude/skills/devops.md +160 -0
- package/.claude/skills/docker.md +160 -0
- package/.claude/skills/enterprise-dashboard.md +613 -0
- package/.claude/skills/finops.md +184 -0
- package/.claude/skills/frontend-developer.md +108 -0
- package/.claude/skills/gcp.md +143 -0
- package/.claude/skills/ml-engineer.md +115 -0
- package/.claude/skills/mlops.md +187 -0
- package/.claude/skills/network-engineer.md +109 -0
- package/.claude/skills/optimization-advisor.md +329 -0
- package/.claude/skills/orchestrator.md +623 -0
- package/.claude/skills/platform-engineer.md +102 -0
- package/.claude/skills/process-automation.md +226 -0
- package/.claude/skills/process-changelog.md +184 -0
- package/.claude/skills/process-documentation.md +484 -0
- package/.claude/skills/process-kanban.md +324 -0
- package/.claude/skills/process-versioning.md +214 -0
- package/.claude/skills/product-designer.md +104 -0
- package/.claude/skills/project-starter.md +443 -0
- package/.claude/skills/qa-engineer.md +109 -0
- package/.claude/skills/security-architect.md +135 -0
- package/.claude/skills/sre.md +109 -0
- package/.claude/skills/system-design.md +126 -0
- package/.claude/skills/technical-writer.md +101 -0
- package/.gitattributes +2 -0
- package/GITHUB_COPILOT.md +106 -0
- package/README.md +192 -291
- package/package.json +16 -46
- 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']})")
|