scripts-strategy-mermaid-diagrams
#!/usr/bin/env python3 """
title: "Strategy Mermaid Diagrams" component_type: script version: "1.0.0" audience: contributor status: stable summary: "Strategy Mermaid Diagrams =========================" keywords: ['analysis', 'api', 'diagrams', 'generation', 'git'] tokens: ~500 created: 2025-12-22 updated: 2025-12-22 script_name: "strategy-mermaid-diagrams.py" language: python executable: true usage: "python3 scripts/strategy-mermaid-diagrams.py [options]" python_version: "3.10+" dependencies: [] modifies_files: false network_access: false requires_auth: false
Strategy Mermaid Diagrams
Generate GitHub-compatible Mermaid diagrams for strategy frameworks. Produces Porter's Five Forces, Value Chain, BCG Matrix, and more.
Usage: python3 scripts/strategy-mermaid-diagrams.py --type porters --input data.json python3 scripts/strategy-mermaid-diagrams.py --type value-chain --demo python3 scripts/strategy-mermaid-diagrams.py --type bcg-matrix --output diagram.md
Diagram Types: porters - Porter's Five Forces analysis value-chain - Value Chain Analysis bcg-matrix - BCG Growth-Share Matrix strategy-canvas - Blue Ocean Strategy Canvas capability - Capability Maturity Assessment decision-tree - Strategic Decision Tree
Source: Adapted from ANALYZE-REVIEW/extracted-consulting/mermaid_strategy_diagrams.py """
import argparse import json import sys from dataclasses import dataclass from datetime import datetime, timezone from pathlib import Path from typing import Dict, List, Any, Optional
@dataclass class DiagramMetadata: """Track diagram generation for compliance.""" generated_at: datetime data_sources: List[str] confidence_score: float validation_status: str
class MermaidStrategyDiagrams: """Generate GitHub-compatible Mermaid diagrams for strategy frameworks."""
INTENSITY_COLORS = {
'Very High': '#ef4444',
'High': '#f59e0b',
'Moderate': '#eab308',
'Medium': '#eab308',
'Low': '#10b981',
'Very Low': '#3b82f6'
}
@classmethod
def generate_porters_five_forces(cls, forces: Dict[str, Dict[str, Any]],
industry: str,
metadata: Optional[DiagramMetadata] = None) -> str:
"""Generate Porter's Five Forces diagram."""
rivalry = forces.get('competitive_rivalry', {})
new_entrants = forces.get('threat_of_new_entrants', {})
suppliers = forces.get('supplier_power', {})
buyers = forces.get('buyer_power', {})
substitutes = forces.get('threat_of_substitutes', {})
def get_color(intensity: str) -> str:
return cls.INTENSITY_COLORS.get(intensity, '#6b7280')
diagram = f"""# Porter's Five Forces Analysis: {industry}
Key Drivers
Competitive Rivalry: {rivalry.get('drivers', 'No data available')}
New Entrant Threat: {new_entrants.get('drivers', 'No data available')}
Supplier Power: {suppliers.get('drivers', 'No data available')}
Buyer Power: {buyers.get('drivers', 'No data available')}
Substitute Threat: {substitutes.get('drivers', 'No data available')} """ if metadata: diagram += f"""
Validation Metadata
-
Generated: {metadata.generated_at.strftime('%Y-%m-%d %H:%M:%S')}
-
Confidence Score: {metadata.confidence_score:.1%}
-
Validation Status: {metadata.validation_status}
-
Data Sources: {', '.join(metadata.data_sources)} """ return diagram
@classmethod def generate_value_chain(cls, activities: Dict[str, List[Dict]], industry: str) -> str: """Generate Value Chain Analysis diagram.""" primary = activities.get('primary', []) support = activities.get('support', [])
diagram = f"""# Value Chain Analysis: {industry}
Value Chain Components
Primary Activities
""" for activity in primary: diagram += f""" {activity.get('name', 'Activity')}
-
Value Add: {activity.get('value_add', 'N/A')}
-
Key Capabilities: {', '.join(activity.get('capabilities', []))} """ return diagram
@classmethod def generate_bcg_matrix(cls, units: List[Dict], company: str) -> str: """Generate BCG Growth-Share Matrix diagram.""" diagram = f"""# Business Portfolio Matrix: {company}
""" return diagram
def get_demo_data(diagram_type: str) -> Dict[str, Any]: """Return demo data for each diagram type.""" demos = { 'porters': { 'forces': { 'competitive_rivalry': {'intensity': 'High', 'score': 4, 'drivers': 'Fragmented market, low switching costs'}, 'threat_of_new_entrants': {'intensity': 'Moderate', 'score': 3, 'drivers': 'Low capital, but brand important'}, 'supplier_power': {'intensity': 'High', 'score': 4, 'drivers': 'Cloud provider concentration'}, 'buyer_power': {'intensity': 'Moderate', 'score': 3, 'drivers': 'Enterprise leverage'}, 'threat_of_substitutes': {'intensity': 'Low', 'score': 2, 'drivers': 'Few alternatives'} }, 'industry': 'AI Development Tools' }, 'value-chain': { 'activities': { 'primary': [ {'name': 'Inbound Logistics', 'value_add': 'Raw material handling', 'capabilities': ['Sourcing', 'Storage']}, {'name': 'Operations', 'value_add': 'Core transformation', 'capabilities': ['Manufacturing', 'QC']}, {'name': 'Outbound', 'value_add': 'Distribution', 'capabilities': ['Delivery', 'Fulfillment']}, {'name': 'Marketing', 'value_add': 'Demand creation', 'capabilities': ['Brand', 'Sales']}, {'name': 'Service', 'value_add': 'Customer success', 'capabilities': ['Support', 'Retention']} ], 'support': [] }, 'industry': 'SaaS Platform' }, 'bcg-matrix': { 'units': [ {'name': 'Enterprise', 'relative_market_share': 1.8, 'market_growth_rate': 15}, {'name': 'SMB Platform', 'relative_market_share': 0.6, 'market_growth_rate': 25}, {'name': 'Legacy Services', 'relative_market_share': 2.1, 'market_growth_rate': 5}, {'name': 'Emerging', 'relative_market_share': 0.4, 'market_growth_rate': 8} ], 'company': 'TechCorp' } } return demos.get(diagram_type, demos['porters'])
def main(): parser = argparse.ArgumentParser( description="Generate Mermaid strategy diagrams", formatter_class=argparse.RawDescriptionHelpFormatter ) parser.add_argument('--type', choices=['porters', 'value-chain', 'bcg-matrix', 'swot'], default='porters', help='Diagram type') parser.add_argument('--input', help='Input JSON file') parser.add_argument('--output', help='Output markdown file') parser.add_argument('--demo', action='store_true', help='Use demo data')
args = parser.parse_args()
if args.demo:
data = get_demo_data(args.type)
elif args.input:
data = json.loads(Path(args.input).read_text())
else:
print("Provide --input file or use --demo", file=sys.stderr)
sys.exit(1)
generator = MermaidStrategyDiagrams()
if args.type == 'porters':
output = generator.generate_porters_five_forces(
data['forces'], data.get('industry', 'Industry'))
elif args.type == 'value-chain':
output = generator.generate_value_chain(
data['activities'], data.get('industry', 'Industry'))
elif args.type == 'bcg-matrix':
output = generator.generate_bcg_matrix(
data['units'], data.get('company', 'Company'))
elif args.type == 'swot':
output = generator.generate_swot_diagram(data)
else:
output = "Diagram type not implemented"
if args.output:
Path(args.output).write_text(output)
print(f"Diagram saved to: {args.output}")
else:
print(output)
if name == "main": main()