import json
import math
from datetime import datetime, timedelta
from typing import Dict, List, Any, Optional
from dataclasses import dataclass, field
from enum import Enum
import random
class RiskLevel(Enum):
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
class ProjectType(Enum):
STARTUP = "startup"
PRODUCTION = "production"
ECOMMERCE = "ecommerce"
SAAS = "saas"
FRANCHISE = "franchise"
class Region(Enum):
MOSCOW = "moscow"
SPB = "spb"
CENTRAL = "central"
SIBERIA = "siberia"
FAR_EAST = "far_east"
@dataclass
class TeamMember:
role: str
salary: float
experience: str
responsibilities: List[str]
def __str__(self):
return f"{self.role}: {self.salary:,.0f} руб/мес"
@dataclass
class MarketingCampaign:
channel: str
cost_per_month: float
expected_leads: int
conversion_rate: float
def calculate_roi(self, average_client_value: float) -> float:
expected_clients = self.expected_leads * self.conversion_rate / 100
revenue = expected_clients * average_client_value
return (revenue - self.cost_per_month) / self.cost_per_month * 100 if self.cost_per_month > 0 else 0
@dataclass
class FinancialMetrics:
revenue: float = 0
expenses: float = 0
profit: float = 0
margin: float = 0
roi: float = 0
cac: float = 0
ltv: float = 0
def update(self, revenue: float, expenses: float):
self.revenue = revenue
self.expenses = expenses
self.profit = revenue - expenses
self.margin = (self.profit / revenue * 100) if revenue > 0 else 0
def __str__(self):
return f"""
Финансовые показатели:
- Выручка: {self.revenue:,.0f} руб
- Расходы: {self.expenses:,.0f} руб
- Прибыль: {self.profit:,.0f} руб
- Маржа: {self.margin:.1f}%
- ROI: {self.roi:.1f}%
- CAC: {self.cac:,.0f} руб
- LTV: {self.ltv:,.0f} руб
"""
class BusinessPlanCalculator:
def __init__(self):
self.load_parameters()
def load_parameters(self):
"""Загрузка параметров из предоставленного JSON"""
self.parameters = {
"project_types": {
"startup": {"name": "Стартап", "risk": "high", "duration": "6-24 months", "team_size": "3-15"},
"production": {"name": "Производство", "risk": "medium", "duration": "12-36 months", "team_size": "10-100"},
"ecommerce": {"name": "E-commerce", "risk": "medium", "duration": "3-12 months", "team_size": "5-30"},
"saas": {"name": "SaaS", "risk": "high", "duration": "6-18 months", "team_size": "5-25"},
"franchise": {"name": "Франшиза", "risk": "low", "duration": "3-9 months", "team_size": "2-10"}
},
"regions": {
"moscow": {"salary_multiplier": 1.3, "rent_multiplier": 1.5, "marketing_cost": 1.4},
"spb": {"salary_multiplier": 1.2, "rent_multiplier": 1.3, "marketing_cost": 1.3},
"central": {"salary_multiplier": 1.0, "rent_multiplier": 1.0, "marketing_cost": 1.0},
"siberia": {"salary_multiplier": 0.9, "rent_multiplier": 0.8, "marketing_cost": 0.9},
"far_east": {"salary_multiplier": 1.1, "rent_multiplier": 0.9, "marketing_cost": 1.0}
},
"team_roles": {
"ceo": {"salary_range": [150000, 500000], "experience": "5+ years", "responsibilities": ["Стратегия", "Управление"]},
"cto": {"salary_range": [120000, 400000], "experience": "5+ years", "responsibilities": ["Технологии", "Разработка"]},
"developer": {"salary_range": [80000, 250000], "experience": "2+ years", "responsibilities": ["Кодирование", "Тестирование"]},
"designer": {"salary_range": [70000, 200000], "experience": "2+ years", "responsibilities": ["Дизайн", "UX/UI"]},
"marketer": {"salary_range": [60000, 180000], "experience": "2+ years", "responsibilities": ["Маркетинг", "Реклама"]},
"manager": {"salary_range": [50000, 150000], "experience": "1+ years", "responsibilities": ["Управление", "Координация"]}
},
"financial_metrics": {
"roi_targets": {"low_risk": 15, "medium_risk": 25, "high_risk": 40},
"payback_periods": {"tech": "12-24 months", "production": "24-48 months", "services": "6-18 months"},
"margins": {"saas": [60, 80], "ecommerce": [20, 40], "production": [15, 30], "services": [40, 60]}
}
}
def calculate_project_budget(self,
project_type: str,
region: str,
team_composition: Dict[str, int],
office_size: float = 50.0,
marketing_budget: float = 500000,
equipment_cost: float = 1000000,
duration_months: int = 12) -> Dict[str, Any]:
"""
Расчет полного бюджета проекта
Args:
project_type: Тип проекта (startup, production, etc.)
region: Регион (moscow, spb, etc.)
team_composition: Состав команды {роль: количество}
office_size: Площадь офиса в м²
marketing_budget: Бюджет на маркетинг
equipment_cost: Стоимость оборудования
duration_months: Длительность проекта в месяцах
"""
# Проверка входных параметров
if project_type not in self.parameters["project_types"]:
raise ValueError(f"Неизвестный тип проекта: {project_type}")
if region not in self.parameters["regions"]:
raise ValueError(f"Неизвестный регион: {region}")
# Получение множителей для региона
region_params = self.parameters["regions"][region]
salary_multiplier = region_params["salary_multiplier"]
rent_multiplier = region_params["rent_multiplier"]
marketing_multiplier = region_params["marketing_cost"]
# Расчет расходов на зарплаты
salary_expenses = 0
team_members = []
for role, count in team_composition.items():
if role in self.parameters["team_roles"]:
role_data = self.parameters["team_roles"][role]
avg_salary = sum(role_data["salary_range"]) / 2
monthly_salary = avg_salary * salary_multiplier
total_monthly = monthly_salary * count
salary_expenses += total_monthly
for i in range(count):
team_members.append(TeamMember(
role=role,
salary=monthly_salary,
experience=role_data["experience"],
responsibilities=role_data["responsibilities"]
))
# Расчет арендной платы (предположим 2000 руб/м²/мес для центрального региона)
base_rent = 2000 # руб/м²/мес
monthly_rent = base_rent * office_size * rent_multiplier
# Расчет расходов на оборудование (амортизация за период проекта)
monthly_equipment = equipment_cost / duration_months
# Расчет маркетинговых расходов
monthly_marketing = (marketing_budget * marketing_multiplier) / duration_months
# Прочие расходы (коммуналка, интернет, бухгалтерия и т.д.)
monthly_other = salary_expenses * 0.2 # 20% от ФОТ
# Итого месячные расходы
monthly_expenses = (salary_expenses + monthly_rent +
monthly_equipment + monthly_marketing + monthly_other)
# Расчет доходов на основе типа проекта
project_params = self.parameters["project_types"][project_type]
monthly_revenue = self.estimate_revenue(project_type, team_composition, region)
# Расчет финансовых показателей
total_investment = monthly_expenses * duration_months + equipment_cost
total_revenue = monthly_revenue * duration_months
total_profit = total_revenue - (monthly_expenses * duration_months)
if total_investment > 0:
roi = (total_profit / total_investment) * 100
else:
roi = 0
# Расчет CAC и LTV
cac = marketing_budget / (monthly_revenue * 0.1) if monthly_revenue > 0 else 0 # упрощенный расчет
ltv = monthly_revenue * 6 # предполагаем LTV за 6 месяцев
financial_metrics = FinancialMetrics()
financial_metrics.update(total_revenue, monthly_expenses * duration_months)
financial_metrics.roi = roi
financial_metrics.cac = cac
financial_metrics.ltv = ltv
# Анализ рисков
risks = self.analyze_risks(project_type, region)
# План развития по фазам
phases = self.generate_project_phases(project_type, duration_months)
# Генерация KPI
kpis = self.generate_kpis(project_type)
return {
"project_info": {
"type": project_params["name"],
"risk": project_params["risk"],
"duration": f"{duration_months} месяцев",
"region": region
},
"team": {
"total_members": len(team_members),
"monthly_salary_expenses": salary_expenses,
"members": team_members
},
"monthly_expenses": {
"salaries": salary_expenses,
"rent": monthly_rent,
"equipment": monthly_equipment,
"marketing": monthly_marketing,
"other": monthly_other,
"total": monthly_expenses
},
"financial_summary": {
"total_investment": total_investment,
"monthly_revenue": monthly_revenue,
"total_revenue": total_revenue,
"monthly_profit": monthly_revenue - monthly_expenses,
"total_profit": total_profit,
"roi_percentage": roi,
"payback_period_months": self.calculate_payback(monthly_expenses, monthly_revenue, total_investment)
},
"financial_metrics": financial_metrics,
"risks": risks,
"phases": phases,
"kpis": kpis,
"recommendations": self.generate_recommendations(project_type, region, roi)
}
def estimate_revenue(self, project_type: str, team_composition: Dict[str, int], region: str) -> float:
"""Оценка ежемесячной выручки на основе типа проекта и команды"""
# Базовые оценки для разных типов проектов
base_revenues = {
"startup": 500000, # Стартап
"production": 2000000, # Производство
"ecommerce": 1500000, # E-commerce
"saas": 800000, # SaaS
"franchise": 1000000 # Франшиза
}
if project_type not in base_revenues:
return 0
base_revenue = base_revenues[project_type]
# Корректировка по региону
region_multipliers = {
"moscow": 1.5,
"spb": 1.3,
"central": 1.0,
"siberia": 0.8,
"far_east": 0.9
}
region_mult = region_multipliers.get(region, 1.0)
# Корректировка по размеру команды
total_team = sum(team_composition.values())
team_mult = 1 + (total_team / 20) # Чем больше команда, тем больше потенциал
return base_revenue * region_mult * team_mult
def calculate_payback(self, monthly_expenses: float, monthly_revenue: float,
total_investment: float) -> int:
"""Расчет срока окупаемости в месяцах"""
monthly_profit = monthly_revenue - monthly_expenses
if monthly_profit <= 0:
return 999 # Не окупается
return math.ceil(total_investment / monthly_profit)
def analyze_risks(self, project_type: str, region: str) -> Dict[str, List[Dict]]:
"""Анализ рисков проекта"""
project_risk = self.parameters["project_types"][project_type]["risk"]
risks = {
"market": [
{
"name": "Изменение спроса",
"probability": "medium",
"impact": "high",
"mitigation": "Гибкая бизнес-модель, диверсификация продуктов",
"risk_level": "high" if project_risk == "high" else "medium"
},
{
"name": "Появление конкурентов",
"probability": "high",
"impact": "medium",
"mitigation": "Уникальное предложение, быстрая реакция на рынок",
"risk_level": "high" if project_type in ["saas", "ecommerce"] else "medium"
}
],
"operational": [
{
"name": "Задержка поставок",
"probability": "medium" if project_type == "production" else "low",
"impact": "medium",
"mitigation": "Несколько поставщиков, буферные запасы",
"risk_level": "medium"
},
{
"name": "Технические сбои",
"probability": "medium" if project_type in ["saas", "startup"] else "low",
"impact": "high",
"mitigation": "Резервные системы, мониторинг",
"risk_level": "high" if project_type in ["saas"] else "medium"
}
],
"financial": [
{
"name": "Превышение бюджета",
"probability": "high",
"impact": "medium",
"mitigation": "Строгий контроль расходов, резервный фонд",
"risk_level": "high" if project_risk == "high" else "medium"
},
{
"name": "Кассовый разрыв",
"probability": "medium" if project_risk == "high" else "low",
"impact": "high",
"mitigation": "Финансовый резерв, кредитная линия",
"risk_level": "medium"
}
]
}
return risks
def generate_project_phases(self, project_type: str, duration_months: int) -> List[Dict]:
"""Генерация фаз проекта"""
phases_config = {
"startup": [
{"name": "Идея и исследование", "duration_months": 2, "budget_percent": 10},
{"name": "Прототипирование", "duration_months": 3, "budget_percent": 25},
{"name": "Разработка MVP", "duration_months": 4, "budget_percent": 40},
{"name": "Запуск и рост", "duration_months": 3, "budget_percent": 25}
],
"production": [
{"name": "Исследование рынка", "duration_months": 3, "budget_percent": 15},
{"name": "Разработка продукта", "duration_months": 6, "budget_percent": 35},
{"name": "Запуск производства", "duration_months": 6, "budget_percent": 30},
{"name": "Масштабирование", "duration_months": 3, "budget_percent": 20}
],
"ecommerce": [
{"name": "Подготовка", "duration_months": 2, "budget_percent": 20},
{"name": "Разработка платформы", "duration_months": 4, "budget_percent": 35},
{"name": "Тестирование", "duration_months": 2, "budget_percent": 15},
{"name": "Запуск и продвижение", "duration_months": 4, "budget_percent": 30}
]
}
# Используем стандартные фазы если нет специфичных
phases = phases_config.get(project_type, [
{"name": "Подготовка", "duration_months": 3, "budget_percent": 25},
{"name": "Разработка", "duration_months": 6, "budget_percent": 50},
{"name": "Запуск", "duration_months": 3, "budget_percent": 25}
])
# Адаптируем длительность фаз под общую длительность проекта
total_planned_months = sum(phase["duration_months"] for phase in phases)
scale_factor = duration_months / total_planned_months
for phase in phases:
phase["duration_months"] = round(phase["duration_months"] * scale_factor)
phase["key_activities"] = self.get_phase_activities(phase["name"], project_type)
phase["deliverables"] = self.get_phase_deliverables(phase["name"], project_type)
return phases
def get_phase_activities(self, phase_name: str, project_type: str) -> List[str]:
"""Получение активностей для фазы"""
activities_map = {
"Подготовка": [
"Анализ рынка и конкурентов",
"Разработка концепции",
"Планирование бюджета",
"Формирование команды"
],
"Разработка": [
"Проектирование решения",
"Разработка продукта",
"Тестирование",
"Оптимизация процессов"
],
"Запуск": [
"Маркетинговая кампания",
"Привлечение первых клиентов",
"Сбор обратной связи",
"Корректировка стратегии"
]
}
return activities_map.get(phase_name, ["Специфичные активности для фазы"])
def get_phase_deliverables(self, phase_name: str, project_type: str) -> List[str]:
"""Получение результатов для фазы"""
deliverables_map = {
"Подготовка": [
"Бизнес-план",
"Маркетинговое исследование",
"Финансовая модель",
"План проекта"
],
"Разработка": [
"Рабочий прототип",
"Техническая документация",
"Тестовые результаты",
"Оптимизированные процессы"
],
"Запуск": [
"Запущенный продукт",
"Первые клиенты",
"Аналитика эффективности",
"План масштабирования"
]
}
return deliverables_map.get(phase_name, ["Ключевые результаты фазы"])
def generate_kpis(self, project_type: str) -> Dict[str, List[Dict]]:
"""Генерация KPI для проекта"""
common_kpis = [
{"name": "ROI", "target": "25%+", "measurement": "ежеквартально"},
{"name": "Рост выручки", "target": "20% в месяц", "measurement": "ежемесячно"},
{"name": "Маржа", "target": "20%+", "measurement": "ежемесячно"}
]
type_specific_kpis = {
"saas": [
{"name": "MRR (Monthly Recurring Revenue)", "target": "Рост 15% в месяц", "measurement": "ежемесячно"},
{"name": "Churn Rate", "target": "< 5% в месяц", "measurement": "ежемесячно"},
{"name": "CAC Payback", "target": "< 6 месяцев", "measurement": "ежеквартально"}
],
"ecommerce": [
{"name": "Конверсия", "target": "3%+", "measurement": "еженедельно"},
{"name": "Средний чек", "target": "Рост 10% в месяц", "measurement": "ежемесячно"},
{"name": "Повторные покупки", "target": "30%+", "measurement": "ежемесячно"}
],
"startup": [
{"name": "User Acquisition", "target": "Рост 25% в месяц", "measurement": "еженедельно"},
{"name": "Engagement Rate", "target": "40%+", "measurement": "еженедельно"},
{"name": "Fundraising Milestones", "target": "По графику", "measurement": "ежемесячно"}
]
}
specific_kpis = type_specific_kpis.get(project_type, [])
return {
"financial": common_kpis,
"operational": specific_kpis if specific_kpis else [
{"name": "Эффективность команды", "target": "80%+ выполненных задач", "measurement": "еженедельно"},
{"name": "Соблюдение сроков", "target": "90%+ задач в срок", "measurement": "еженедельно"}
]
}
def generate_recommendations(self, project_type: str, region: str, roi: float) -> List[str]:
"""Генерация рекомендаций на основе анализа"""
recommendations = []
# Рекомендации по ROI
if roi < 15:
recommendations.append("Низкий ROI. Рассмотрите оптимизацию расходов или увеличение цены")
elif roi > 40:
recommendations.append("Высокий ROI. Можно рассмотреть увеличение инвестиций")
# Рекомендации по типу проекта
if project_type == "startup":
recommendations.extend([
"Сфокусируйтесь на MVP для быстрого выхода на рынок",
"Ищите angel investors или венчурное финансирование",
"Тестируйте гипотезы с минимальными затратами"
])
elif project_type == "production":
recommendations.extend([
"Тщательно проработайте цепочку поставок",
"Рассмотрите возможность субсидий для производства",
"Создайте складские запасы для бесперебойной работы"
])
# Рекомендации по региону
if region == "moscow":
recommendations.append("Высокие затраты в Москве. Рассмотрите удаленных сотрудников из регионов")
elif region in ["siberia", "far_east"]:
recommendations.append("Используйте региональные программы поддержки бизнеса")
return recommendations
class BusinessPlanVisualizer:
"""Класс для визуализации бизнес-плана"""
@staticmethod
def print_business_plan(plan: Dict[str, Any]):
"""Красивый вывод бизнес-плана"""
print("=" * 80)
print("???? БИЗНЕС-ПЛАН ПРОЕКТА")
print("=" * 80)
# Информация о проекте
print("\n???? ОБЩАЯ ИНФОРМАЦИЯ О ПРОЕКТЕ")
print("-" * 40)
project_info = plan["project_info"]
print(f"Тип проекта: {project_info['type']}")
print(f"Уровень риска: {project_info['risk']}")
print(f"Длительность: {project_info['duration']}")
print(f"Регион: {project_info['region']}")
# Финансовая сводка
print("\n???? ФИНАНСОВАЯ СВОДКА")
print("-" * 40)
finance = plan["financial_summary"]
print(f"Общие инвестиции: {finance['total_investment']:,.0f} руб")
print(f"Ежемесячная выручка: {finance['monthly_revenue']:,.0f} руб")
print(f"Общая выручка за период: {finance['total_revenue']:,.0f} руб")
print(f"Общая прибыль: {finance['total_profit']:,.0f} руб")
print(f"ROI: {finance['roi_percentage']:.1f}%")
print(f"Срок окупаемости: {finance['payback_period_months']} месяцев")
# Команда
print("\n???? КОМАНДА ПРОЕКТА")
print("-" * 40)
team = plan["team"]
print(f"Общее количество сотрудников: {team['total_members']}")
print(f"Ежемесячные расходы на зарплаты: {team['monthly_salary_expenses']:,.0f} руб")
# Месячные расходы
print("\n???? ЕЖЕМЕСЯЧНЫЕ РАСХОДЫ")
print("-" * 40)
expenses = plan["monthly_expenses"]
for key, value in expenses.items():
if key != 'total':
print(f"{key.capitalize()}: {value:,.0f} руб")
print(f"ИТОГО: {expenses['total']:,.0f} руб")
# Фазы проекта
print("\n???? ФАЗЫ ПРОЕКТА")
print("-" * 40)
for i, phase in enumerate(plan["phases"], 1):
print(f"\nФаза {i}: {phase['name']}")
print(f" Длительность: {phase['duration_months']} месяцев")
print(f" Ключевые активности:")
for activity in phase["key_activities"]:
print(f" • {activity}")
print(f" Результаты:")
for deliverable in phase["deliverables"]:
print(f" • {deliverable}")
# Риски
print("\n⚠️ АНАЛИЗ РИСКОВ")
print("-" * 40)
risks = plan["risks"]
for risk_type, risk_list in risks.items():
print(f"\n{risk_type.upper()} РИСКИ:")
for risk in risk_list:
print(f" • {risk['name']} ({risk['risk_level']}): {risk['mitigation']}")
# KPI
print("\n???? КЛЮЧЕВЫЕ ПОКАЗАТЕЛИ (KPI)")
print("-" * 40)
kpis = plan["kpis"]
print("\nФинансовые KPI:")
for kpi in kpis["financial"]:
print(f" • {kpi['name']}: {kpi['target']} ({kpi['measurement']})")
if "operational" in kpis:
print("\nОперационные KPI:")
for kpi in kpis["operational"]:
print(f" • {kpi['name']}: {kpi['target']} ({kpi['measurement']})")
# Рекомендации
print("\n???? РЕКОМЕНДАЦИИ")
print("-" * 40)
for i, rec in enumerate(plan["recommendations"], 1):
print(f"{i}. {rec}")
print("\n" + "=" * 80)
print("✅ БИЗНЕС-ПЛАН СФОРМИРОВАН")
print("=" * 80)
class InvestmentAnalyzer:
"""Анализатор инвестиционной привлекательности"""
def __init__(self, calculator: BusinessPlanCalculator):
self.calculator = calculator
def analyze_investment_attractiveness(self, plan: Dict[str, Any]) -> Dict[str, Any]:
"""Анализ инвестиционной привлекательности проекта"""
finance = plan["financial_summary"]
roi = finance["roi_percentage"]
payback = finance["payback_period_months"]
risk_level = plan["project_info"]["risk"]
attractiveness = "Низкая"
score = 0
# Оценка по ROI
if roi > 40:
score += 30
elif roi > 25:
score += 20
elif roi > 15:
score += 10
# Оценка по сроку окупаемости
if payback <= 12:
score += 30
elif payback <= 24:
score += 20
elif payback <= 36:
score += 10
# Оценка по рискам
if risk_level == "low":
score += 20
elif risk_level == "medium":
score += 15
else:
score += 5
# Оценка по команде
team_size = plan["team"]["total_members"]
if team_size >= 10:
score += 10
elif team_size >= 5:
score += 7
else:
score += 3
# Оценка по фазе проекта
if len(plan["phases"]) >= 4:
score += 10
# Определение уровня привлекательности
if score >= 80:
attractiveness = "Очень высокая"
recommendation = "Рекомендуется для инвестирования"
elif score >= 60:
attractiveness = "Высокая"
recommendation = "Перспективный проект"
elif score >= 40:
attractiveness = "Средняя"
recommendation = "Требует дополнительного анализа"
else:
attractiveness = "Низкая"
recommendation = "Требует существенной доработки"
return {
"total_score": score,
"attractiveness": attractiveness,
"recommendation": recommendation,
"score_breakdown": {
"roi_score": min(30, max(0, int(roi))),
"payback_score": min(30, max(0, 36 - payback) * 2),
"risk_score": 20 if risk_level == "low" else 15 if risk_level == "medium" else 5,
"team_score": min(10, team_size),
"planning_score": 10 if len(plan["phases"]) >= 4 else 5
}
}
def main():
"""Главная функция для запуска системы"""
print("Добро пожаловать в систему расчета бизнес-планов!")
print("\nДоступные типы проектов:")
print("1. Стартап (startup)")
print("2. Производство (production)")
print("3. E-commerce (ecommerce)")
print("4. SaaS (saas)")
print("5. Франшиза (franchise)")
# Пример использования
calculator = BusinessPlanCalculator()
visualizer = BusinessPlanVisualizer()
analyzer = InvestmentAnalyzer(calculator)
# Пример команды для стартапа в Москве
team_composition = {
"ceo": 1,
"cto": 1,
"developer": 3,
"designer": 1,
"marketer": 2,
"manager": 1
}
try:
# Расчет бизнес-плана
business_plan = calculator.calculate_project_budget(
project_type="startup",
region="moscow",
team_composition=team_composition,
office_size=40.0,
marketing_budget=1000000,
equipment_cost=500000,
duration_months=18
)
# Вывод бизнес-плана
visualizer.print_business_plan(business_plan)
# Анализ инвестиционной привлекательности
print("\n???? АНАЛИЗ ИНВЕСТИЦИОННОЙ ПРИВЛЕКАТЕЛЬНОСТИ")
print("-" * 50)
investment_analysis = analyzer.analyze_investment_attractiveness(business_plan)
print(f"Общий балл: {investment_analysis['total_score']}/100")
print(f"Привлекательность: {investment_analysis['attractiveness']}")
print(f"Рекомендация: {investment_analysis['recommendation']}")
print("\nДетализация оценки:")
for factor, score in investment_analysis["score_breakdown"].items():
factor_name = factor.replace('_', ' ').title()
print(f" {factor_name}: {score} баллов")
# Генерация отчета
print("\n???? ГЕНЕРАЦИЯ ОТЧЕТА...")
generate_report(business_plan, investment_analysis)
except Exception as e:
print(f"Ошибка при расчете бизнес-плана: {e}")
def generate_report(plan: Dict[str, Any], investment_analysis: Dict[str, Any]):
"""Генерация текстового отчета"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"business_plan_report_{timestamp}.txt"
with open(filename, 'w', encoding='utf-8') as f:
f.write("=" * 80 + "\n")
f.write("ОТЧЕТ ПО БИЗНЕС-ПЛАНУ\n")
f.write("=" * 80 + "\n\n")
# Основная информация
f.write("1. ОБЩАЯ ИНФОРМАЦИЯ\n")
f.write("-" * 40 + "\n")
f.write(f"Тип проекта: {plan['project_info']['type']}\n")
f.write(f"Дата формирования: {datetime.now().strftime('%d.%m.%Y %H:%M')}\n\n")
# Финансовые показатели
f.write("2. ФИНАНСОВЫЕ ПОКАЗАТЕЛИ\n")
f.write("-" * 40 + "\n")
finance = plan['financial_summary']
f.write(f"Общие инвестиции: {finance['total_investment']:,.0f} руб\n")
f.write(f"ROI: {finance['roi_percentage']:.1f}%\n")
f.write(f"Срок окупаемости: {finance['payback_period_months']} месяцев\n\n")
# Оценка инвестиционной привлекательности
f.write("3. ИНВЕСТИЦИОННАЯ ПРИВЛЕКАТЕЛЬНОСТЬ\n")
f.write("-" * 40 + "\n")
f.write(f"Общий балл: {investment_analysis['total_score']}/100\n")
f.write(f"Уровень: {investment_analysis['attractiveness']}\n")
f.write(f"Рекомендация: {investment_analysis['recommendation']}\n\n")
# Рекомендации
f.write("4. РЕКОМЕНДАЦИИ\n")
f.write("-" * 40 + "\n")
for i, rec in enumerate(plan['recommendations'], 1):
f.write(f"{i}. {rec}\n")
f.write("\n" + "=" * 80 + "\n")
f.write("КОНЕЦ ОТЧЕТА\n")
f.write("=" * 80 + "\n")
print(f"✅ Отчет сохранен в файл: {filename}")
# Примеры использования для разных типов проектов
def run_examples():
"""Запуск примеров для разных типов проектов"""
calculator = BusinessPlanCalculator()
visualizer = BusinessPlanVisualizer()
examples = [
{
"name": "Стартап (Москва)",
"type": "startup",
"region": "moscow",
"team": {"ceo": 1, "cto": 1, "developer": 2, "designer": 1, "marketer": 1},
"duration": 12
},
{
"name": "E-commerce (СПб)",
"type": "ecommerce",
"region": "spb",
"team": {"ceo": 1, "manager": 2, "marketer": 2, "developer": 2},
"duration": 9
},
{
"name": "Производство (Центральный регион)",
"type": "production",
"region": "central",
"team": {"ceo": 1, "manager": 3, "marketer": 1},
"duration": 24
}
]
for example in examples:
print(f"\n{'='*60}")
print(f"Пример: {example['name']}")
print(f"{'='*60}")
try:
plan = calculator.calculate_project_budget(
project_type=example["type"],
region=example["region"],
team_composition=example["team"],
duration_months=example["duration"]
)
# Краткая информация
finance = plan["financial_summary"]
print(f"Инвестиции: {finance['total_investment']:,.0f} руб")
print(f"ROI: {finance['roi_percentage']:.1f}%")
print(f"Окупаемость: {finance['payback_period_months']} месяцев")
except Exception as e:
print(f"Ошибка: {e}")
if __name__ == "__main__":
main()
# Дополнительно: запуск примеров
print("\n\n" + "="*80)
print("???? ПРИМЕРЫ РАСЧЕТОВ ДЛЯ РАЗНЫХ ТИПОВ ПРОЕКТОВ")
print("="*80)
run_examples()