File size: 5,716 Bytes
ee6bd21
 
 
 
f7daa70
ee6bd21
 
 
 
 
8b1dfa5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7c11ab5
 
352d214
 
 
 
 
 
 
 
 
 
7c11ab5
 
 
 
352d214
 
 
 
7c11ab5
 
 
 
352d214
7c11ab5
352d214
 
 
 
 
7c11ab5
 
352d214
 
 
 
 
 
e93c756
 
352d214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19e516e
352d214
 
 
 
 
 
19e516e
352d214
 
 
7c11ab5
352d214
19e516e
 
e93c756
352d214
 
 
19e516e
352d214
 
 
 
 
 
 
 
5b22d2f
ee6bd21
7c11ab5
7107df1
7c11ab5
19e516e
 
 
 
 
 
7c11ab5
 
 
8e89fc7
19e516e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import math

st.title("Калькулятор Toyota📄")

st.markdown("Тут данные ввести")

Buying_an_autopilot = st.number_input('Покупка автопилота, руб.', value=2000000)
Purchase_of_peripheral_equipment = st.number_input('Покупка перефирийного оборудования, руб.', value=40000)
Purchase_by = st.number_input('Покупка ПО, руб.', value=10000)
Introduction_of_autopilot = st.number_input('Внедрение автопилота, руб.', value=20000)
Maintenance = st.number_input('Обслуживание (месяц), руб.', value=100000)
The_cost_of_repairing_one_car = st.number_input('Стоимость ремонта одной машины, руб.', value=10000)
Inflation_rate = st.number_input('Уровень инфляции', value=0.04)
Monthly_salary_rate = st.number_input('Заработная ставка, руб. в месяц', value=40000)
Number_of_months = st.number_input('Количество месяцев', value=12)
Equipment_breakdown_rate = st.number_input('Коэффициент поломки оборудования', value=0.1)
Price_for_processing_ont_pallet = st.number_input('Цена за обработку 1 паллета, руб.', value=300)
Cargo_flow = st.number_input('Грузопоток, шт/месяц', value=10000)
Efficiency = st.number_input('Производительность, шт в час', value=5)
Number_of_working_hours = st.number_input('Количество рабочих часов', value=8)
Shift_of_one_employee = st.number_input('Смена 1 работника, ч.', value=8)
Number_of_working_days_month = st.number_input('Количество рабочих дней в месяц, дн.', value=20)
Social_benefits_for_one_employee = st.number_input('Социальные выплаты 1 сотруднику, руб.', value=10000)
Insurance_rate = st.number_input('Ставка страхования', value=0.005)
Income_tax_rate = st.number_input('Ставка налога на прибыль', value=0.2)
Number_of_autopilots_serviced_by_one_employee = st.number_input('Количество автопилотов, обслуживаемых 1 работником', value=10)
discounting = st.number_input('Ставка дисконтирования в месяц', value=0.028)

Rate_CPI = 1.1


def get_number_pallets_and_machines_employees():
    Number_pallets = Efficiency * Number_of_working_hours * Number_of_working_days_month
    Number_machines = math.ceil(Cargo_flow / Number_pallets)
    Number_employees = math.ceil((Number_machines * Number_of_working_hours / Shift_of_one_employee) / Number_of_autopilots_serviced_by_one_employee)
    
    return Number_pallets, Number_machines, Number_employees


def get_revenue(idx):
    indexation = math.floor(idx / 12)
    Price = Price_for_processing_ont_pallet * math.pow(Rate_CPI, indexation)
    revenue = Number_machines * Number_pallets * Price
    
    return revenue


def get_costs(idx):
    indexation = math.floor(idx / 12)
    wage_fund_with_indexation = math.pow((Social_benefits_for_one_employee + Monthly_salary_rate), indexation)
    
    Expected_repair_costs_per_month = Number_machines * Equipment_breakdown_rate * The_cost_of_repairing_one_car
    Wage_Fund = Number_employees * wage_fund_with_indexation
    The_cost_of_insurance = Number_machines * Insurance_rate * (Buying_an_autopilot + Purchase_of_peripheral_equipment)
    
    return Purchase_by + Number_machines * Maintenance + Expected_repair_costs_per_month + Wage_Fund + The_cost_of_insurance


def get_profit(amortization, idx):
    profit = get_revenue(idx) - get_costs(idx) - amortization
    if profit > 0:
        return profit
    else:
        return profit * 0.8
    
    
def get_PV(profit, discounting):
    return profit * discounting


def get_array_discounting():
    array_discounting = [1]
    for idx in range(Number_of_months):
        array_discounting.append(array_discounting[-1] / (1 + discounting))
    return array_discounting


def get_amortization(value):
    array_amortization = [0]
    value = value / 60
    for idx in range(Number_of_months):
        array_amortization.append(value)
    return array_amortization


def get_array_CF_PV():
    I_0 = Buying_an_autopilot * Number_machines + Purchase_of_peripheral_equipment + Introduction_of_autopilot
    
    array_discounting = get_array_discounting()
    array_amortization = get_amortization(I_0)
    
    array_PV = [-I_0]
    array_CF = [-I_0]
    
    for idx in range(1, Number_of_months + 1, 1):
        
        profit = get_profit(array_amortization[idx], idx)
        
        array_CF.append(profit)
        
        cur_PV = get_PV(profit, array_discounting[idx])
        
        array_PV.append(cur_PV)
        
    return array_CF, array_PV


def get_array_NPV():
    array_NPV = [array_PV[0]]
    for idx in range(1, Number_of_months + 1, 1):
        array_NPV.append(array_NPV[-1] + array_PV[idx])
    return array_NPV


if st.button('Сюда кликнуть чтобы посчитать'):
    Number_pallets, Number_machines, Number_employees = get_number_pallets_and_machines_employees()
    array_CF, array_PV = get_array_CF_PV()
    array_NPV =  get_array_NPV()
    
    IRR = np.irr(array_CF)
    
    st.write(f'NPV за {Number_of_months} месяцев:', array_NPV[-1])
    st.write(f'IRR на {Number_of_months} месяцев:', IRR)
    
    chart_data = pd.DataFrame(columns=['PV', 'NPV'])
    chart_data['PV'] = array_PV
    chart_data['NPV'] = array_NPV

    st.area_chart(chart_data)